/* app/assets/stylesheets/about.css
   "Favorite style" pass (see docs/design.md) — house-palette hero card +
   light FAQ cards, replacing the old flat/plain layout. Sizes here are in
   pt (word-processor points) per the site's 15pt floor rule — never go
   below 15pt anywhere on this page. */

.ab_about-page {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
}

/* Hero: dark gradient panel, big emoji, white copy — the house-palette take
   on the "Your Camp Fire is Lit!" card (navy/blue instead of the one-off
   fire purple/orange). */
.ab_hero {
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 55%, #0288d1 100%);
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
  padding: 36px 24px;
  margin-bottom: 32px;
  text-align: center;
  color: #ffffff;
}

.ab_hero-emoji {
  font-size: 44pt;
  line-height: 1;
  margin-bottom: 8px;
}

.ab_page-title {
  color: #ffffff;
  font-size: 27pt;
  margin: 0 0 4px;
}

.ab_hero-tagline {
  font-style: italic;
  font-size: 16pt;
  color: #e3f2fd;
  margin: 0 0 16px;
}

.ab_hero-intro {
  font-size: 15pt;
  line-height: 1.5;
  color: #ffffff;
  max-width: 620px;
  margin: 0 auto;
}

.ab_faq-section h2 {
  font-size: 18pt;
  color: #0b2a5b;
  margin-bottom: 20px;
  text-align: center;
}

/* Readable content on a light card, not directly on a gradient — the
   Audience guidance in docs/design.md. */
.ab_faq-item {
  margin-bottom: 16px;
  padding: 18px 20px;
  background: #e3f2fd;
  border: 1px solid rgba(2, 136, 209, 0.18);
  border-radius: 14px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}

.ab_faq-q {
  font-size: 16pt;
  color: #01579b;
  margin: 0 0 8px;
}

.ab_faq-item p {
  font-size: 15pt;
  color: #2b2b2b;
  line-height: 1.5;
  margin: 0;
}

.ab_cta-section {
  text-align: center;
  margin-top: 32px;
}

.ab_cta-section p {
  font-size: 16pt;
  color: #2b2b2b;
}

/* Pill CTA, house yellow — the "one glowing yellow CTA" pattern from
   docs/design.md, same rounding/hover treatment as .clsPulseButton. */
.ab_blue-button {
  display: inline-block;
  padding: 10px 28px;
  background-color: #ffd43b;
  color: #2b2b2b;
  font-weight: bold;
  text-decoration: none;
  border-radius: 25px;
  margin: 0 10px;
  transition: transform 0.2s, background 0.2s;
}

.ab_blue-button:hover {
  background-color: #ffe066;
  transform: scale(1.05);
}

.ab_version-footer {
  margin-top: 28px;
  text-align: center;
}

.ab_version-pill {
  display: inline-block;
  background: #e3f2fd;
  color: #01579b;
  font-weight: bold;
  font-size: 15pt;
  padding: 6px 18px;
  border-radius: 20px;
}

@media (max-width: 800px) {
  .ab_page-title {
    font-size: 21pt;
  }
}
/* app/assets/stylesheets/admin.css */
/* Flash message styling */
.flash {
  padding: 10px;
  margin-bottom: 15px;
  border-radius: 4px;
  font-size: 15pt;
}

.clsAdminContainer {
  text-align: center;
  padding: 1px;
  border-radius: 10px;
  margin: 20px auto;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

  .clsAdminMenuBar {
    text-align: center;
  }

  /* Smaller text + tighter row spacing so the admin nav buttons wrap to two
     rows instead of three on typical widths. */
  .clsAdminMenuBar .clsButton {
    font-size: 0.85em;
    padding: 8px 12px;
    margin: 4px;
  }

  /* Explicit gap between the emoji icon and the button label — relying on
     the whitespace in the .erb source isn't reliable once the button is a
     flex container (.clsRoundButton). */
  .clsAdminMenuBar .clsButton .icon {
    margin-right: 6px;
  }

.flash.alert {
  background-color: #d81b60;
  color: white;
  border: 1px solid #a11245;
}

table {
  width: 100%;
  border-collapse: collapse;
  margin-top: 10px;
}

th, td {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: left;
}

.clsStatsContainer {
  text-align: center;
  margin: 20px 0;
}

.clsStatsGrid {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 15px;
  margin: 0 auto;
}

.clsStatsGrid p {
  margin: 0;
  font-size: 1.1em;
  line-height: 1.5;
}

.clsHighlight {
  background-color: #e3f2fd;
  padding: 1px 6px;
  border-radius: 5px;
  color: #6a1b9a; /* Bold purple */
  font-size: 1.4em; /* Larger than row */
  font-weight: bold;
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  transition: transform 0.2s ease;
}

.clsHighlight:hover {
  transform: scale(1.05);
}

.clsStatEmoji {
  font-size: 1.4em;
  vertical-align: middle;
}

.admin_clsField {
  margin: 15px 0;
}

/* Admin home ("Working Pages") — was a single narrow column of links down
   the left edge no matter how wide the browser was. Grid of section cards
   lets it actually use a wide/full-screen browser instead of leaving most
   of it blank. */
.ah_clsHomeContainer {
  margin: 20px 3vw;
  padding: 20px;
}

.ah_clsPagesGrid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 24px;
  text-align: left;
}

.ah_clsSection {
  background-color: #ffffff;
  border: 1px solid #bfe3ff;
  border-radius: 8px;
  padding: 14px 18px;
}

.ah_clsSectionTitle {
  margin: 0 0 10px;
  font-size: 1.1em;
  color: #007bff;
  border-bottom: 1px solid #e3f2fd;
  padding-bottom: 6px;
}

.ah_clsSectionList {
  list-style: none;
  margin: 0;
  padding: 0;
}

.ah_clsSectionList li {
  display: flex;
  align-items: flex-start;
  margin-bottom: 8px;
  font-size: 15pt;
  /* each item is its own little box, so it is easy to pick one out */
  background-color: #f4f9ff;
  border: 1px solid #bfe3ff;
  border-radius: 8px;
  padding: 8px 10px;
}
.ah_clsSectionList li:hover {
  background-color: #e3f2fd;
  border-color: #64b5f6;
}

/* Fixed-width icon column + a separate text column, rather than a text-indent
   hanging-indent guess — a wrapped second line lines up exactly under the
   first line's text (not the emoji) regardless of how wide any given emoji
   glyph actually renders. */
.ah_clsLinkIcon {
  flex-shrink: 0;
  width: 1.6em;
}

.ah_clsLinkText {
  flex: 1;
  min-width: 0;
}



/* app/assets/stylesheets/admin_answers.css */

/* This whole page is admin-only (Admin::AnswersController#edit requires
   admin), so the container carries the site's red admin-only shading/border
   instead of the default blue .clsBlueContainer look. */
.aa_clsAdminAnswerPage.clsBlueContainer {
  /* .clsBlueContainer sets `background:` (shorthand) to its blue gradient,
     which also sets background-image — an opaque image that paints over
     any background-color, so background-color alone here would never show.
     Clear the inherited image so the red background-color is visible. */
  background-image: none;
  background-color: #fdecea;
  border: 2px solid #c0392b;
}

/* This whole page is admin-only (Admin::AnswersController#new requires
   admin), so it gets the same red admin-only shading/border. */
.aa_clsAdminNewAnswerPage.clsBlueContainer {
  background-image: none;
  background-color: #fdecea;
  border: 2px solid #c0392b;
  /* Also override .clsBlueContainer's plain `margin: 20px` so the box stays
     horizontally centered (width + margin: auto below). Needs the compound
     selector, same specificity trick as background-color/border above —
     `.aa_clsAdminNewAnswerPage` alone ties with `.clsBlueContainer` on
     specificity, and Sprockets' `require_tree .` + `require_self` puts
     application.css's own rules (incl. .clsBlueContainer) after this file,
     so the plain-class version would silently lose the centering. */
  margin: 4px auto;
}

/* Admin::AnswersController#user_answers also requires admin, so it gets the
   same red admin-only shading/border/title treatment as the pages above. */
.au_clsAdminUserAnswersPage.clsBlueContainer {
  /* .clsBlueContainer sets `background:` (shorthand) to its blue gradient,
     which also sets background-image — an opaque image that paints over
     any background-color, so background-color alone here would never show.
     Clear the inherited image so the red background-color is visible. */
  background-image: none;
  background-color: #fdecea;
  border: 2px solid #c0392b;
}
.au_clsAdminUserAnswersPage_title {
  color: #c0392b;
}

/* .clsActions (application.css) sets align-items: center but never sets
   display: flex, so it does nothing — the submit <input> and the Cancel <a>
   fall back to default inline baseline alignment, which sits them at
   different heights. Scoped to this page only. */
.aa_clsAdminAnswerPage .clsActions {
  display: flex;
  justify-content: center;
}

/* Delete-answer confirmation page — the question being deleted is the whole
   point of the page, so it needs to actually be readable at a glance instead
   of buried in a small "Question: ..." line next to Category/Answer. */
.da_question-category {
  text-align: center;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-size: 0.9em;
  font-weight: bold;
  color: #6b6b6b;
  margin-bottom: 0.25rem;
}
.da_question-text {
  text-align: center;
  font-size: 1.8em;
  font-weight: bold;
  color: #1b1b1b;
  margin: 0 0 1.5rem;
  line-height: 1.3;
}

.aa_admin-answers select,
.aa_admin-answers input[type="text"],
.aa_admin-answers input[type="password"] {
  padding: 8px;
  border-radius: 5px;
  border: 1px solid #ccc;
  width: fit-content;
}

/* Admin Add New Answer page: at half-screen width the stacked alert boxes +
   3 headings + form pushed "Save Answer" below the fold, forcing a scroll to
   answer a single question. Tighten vertical spacing so it fits without
   scrolling.
   NOTE: this view opens its own `<body class="admin-new-answer-page">`
   nested inside the layout's real <body> (same pattern used by
   sessions/login.html.erb, and relied on elsewhere here for the pulse
   animation on .ua_admin-red-alert) — per HTML parsing rules that doesn't
   create a second element, it merges the class onto the one real <body>
   that also holds the site nav/admin button row/footer. That means any
   rule keyed off `body.admin-new-answer-page` that changes the BODY's own
   box layout (display/position/min-height) leaks onto the whole page and
   breaks the nav — a `display: flex; min-height: 100vh` rule here
   previously did exactly that. Keep rules here scoped to *descendants*
   (spacing/font-size on specific elements) only — never restyle
   `body.admin-new-answer-page` itself. */
body.admin-new-answer-page .ua_admin-red-alert {
  padding: 6px 16px;
  margin: 4px auto;
  font-size: 1em;
  width: 90%;
  max-width: 900px;
  box-sizing: border-box;
}
body.admin-new-answer-page h1,
body.admin-new-answer-page h2 {
  margin: 0.15em 0;
}
.aa_clsAdminNewAnswerPage {
  margin: 4px auto;
  padding-top: 4px;
  padding-bottom: 4px;
  width: 90%;
  max-width: 900px;
  box-sizing: border-box;
}
.aa_clsAdminNewAnswerPage h1 {
  font-size: 1.15em;
}

/* Draws the eye to whose answer this is before saving. */
.aa_answer-for-pulse {
  color: #c0392b;
  animation: aa_answer-for-pulse 1.8s ease-in-out infinite;
}
@keyframes aa_answer-for-pulse {
  0%   { opacity: 1; }
  50%  { opacity: 0.55; }
  100% { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .aa_answer-for-pulse { animation: none; }
}
.aa_clsAdminNewAnswerPage h2 {
  font-size: 1em;
}
.aa_clsAdminNewAnswerPage .clsFormGroupCentered {
  margin: 4px 0;
}
.aa_clsAdminNewAnswerPage .clsButton {
  height: 32px;
  padding: 4px 12px;
  margin: 4px;
  font-size: 0.9em;
}
/* Smaller variant of the site-wide .clsAdminOnlyBox for the parent-question
   callout on this page — that box only needs one small line, not the full
   padding/font used for bigger admin-only sections elsewhere. */
.au_clsParentQuestionBox {
  padding: 3px 10px;
  margin: 4px 0;
  font-size: 0.8em;
}
.au_clsParentQuestionBox p {
  margin: 2px 0;
}

/* Save Answer stays visibly grayed-out and unclickable until an answer is
   selected/entered (see admin_new_answer.html.erb's aa_answer_input script). */
#aa_save_answer_btn:disabled {
  background-color: #ccc !important;
  color: #888 !important;
  cursor: not-allowed;
}

.aa_clsAdminNewAnswerPage .clsActions {
  display: flex;
  justify-content: center;
  margin-top: 4px;
}

/* New Answer page: fill-in-the-blank answer box — wider (fills the rest of the
   row beside the label) and only about 2 lines tall. */
.aa_clsAdminNewAnswerPage textarea#aa_answer_input {
  flex: 1 1 auto;
  min-width: 0;
  width: 100%;
}

/* Admin Edit Answer: compact header area (docs/design.md, "Admin pages: compact header area") —
   smaller titles, alert and Edit Question button so the answer box starts higher. */
.aa_clsAdminAnswerPage h1 {
  font-size: 1.15em;
  margin: 4px 0;
}
.aa_clsAdminAnswerPage h2 {
  font-size: 1em;
  margin: 4px 0;
}
.aa_clsAdminAnswerPage .ua_admin-red-alert {
  font-size: 0.9em;
  padding: 4px 14px;
  margin: 4px auto;
}
.aa_clsAdminAnswerPage .ua_admin-red-alert span.username {
  font-size: 1.15em;
}
.aa_clsAdminAnswerPage .clsFormGroupCentered {
  margin: 4px 0;
}
.aa_clsAdminAnswerPage .clsButton.clsSmallButton {
  height: 28px;
  padding: 2px 12px;
  font-size: 0.85em;
}
.clsAdminTable .row-even {
  background-color: #F5F5F5; /* Light gray for even rows */
}

.clsAdminTable .row-odd {
  background-color: #FFFFFF; /* White for odd rows */
}

.clsAdminTable .matching-answer {
  background-color: #90EE90; /* Green for matching answers */
}

.clsAdminTable .non-matching-answer {
  background-color: #FFB6C1; /* Red for non-matching or one unanswered */
}

.clsAdminTable .unanswered-both {
  background-color: #FFFACD; /* Yellow for both unanswered */
}
/* app/assets/stylesheets/admin_emails_sent_logs.css
   Admin-only page (admin/emails_sent_logs/index.html.erb) — red-shaded
   background + bold red border, same convention used elsewhere for
   admin-only pages (see admin_question_users.css's .qu_admin_container). */
.es_admin-only-page {
  background-color: #fdecea;
  border: 3px solid #c0392b;
  border-radius: 12px;
  padding: 16px 24px;
  margin: 16px 0;
}

/* The browser's default <h1> top margin left extra empty space above the
   title inside the padded container — trimmed to line up close to the top. */
.es_admin-only-page h1 {
  margin-top: 4px;
}

.es_search_row th {
  padding: 4px 6px;
  background: #fff5f4;
}

.es_search_row input[type="text"] {
  width: 100%;
  box-sizing: border-box;
  padding: 4px 6px;
  font-size: 0.9em;
  border: 1px solid #ccc;
  border-radius: 4px;
}

.es_search_btn {
  padding: 4px 10px;
  font-size: 0.85em;
  border: 1px solid #c0392b;
  border-radius: 4px;
  background: #fff;
  color: #c0392b;
  cursor: pointer;
  white-space: nowrap;
}
.es_search_btn:hover {
  background: #c0392b;
  color: #fff;
}

/* Responsive: on a narrow browser, wrap cell content onto multiple lines
   instead of forcing a wide table / horizontal scroll. table-layout:fixed
   makes columns actually shrink instead of growing to fit their widest
   cell's content. */
#es_logs_table {
  width: 100%;
  table-layout: fixed;
  border-collapse: collapse;
}
#es_logs_table th,
#es_logs_table td {
  word-wrap: break-word;
  overflow-wrap: break-word;
  padding: 6px 8px;
}

.es_sent-at {
  font-size: 0.85em;
}

.es_sortable {
  cursor: pointer;
  user-select: none;
}
/* The site's global `th` rule sets white text — a light hover background
   here made that text unreadable. Darkening the same blue instead keeps it
   white-on-dark, just like the unhovered header. */
.es_sortable:hover {
  background: #026da3;
  color: #fff;
}
.es_sort-arrow {
  margin-left: 4px;
  font-size: 0.8em;
}

@media (max-width: 700px) {
  #es_logs_table {
    font-size: 0.85em;
  }
}
.clsFormGroup {
  text-align: center;
  margin-bottom: 20px;
}

.clsTable {
  width: 100%;
  border-collapse: collapse;
  margin-top: 20px;
}

.clsTable th,
.clsTable td {
  padding: 10px;
  border: 1px solid #ddd;
  text-align: left;
}

.clsTable th {
  background-color: #007bff;
  color: white;
}

.clsTable tr:nth-child(even) {
  background-color: #f2f2f2;
}


.form-input {
  padding: 8px;
  border-radius: 5px;
  border: 1px solid #ddd;
}
.clsNotificationsContainer {
  padding: 20px;
}

.clsNotificationsTable {
  width: 100%;
  border-collapse: collapse;
}

.clsNotificationsTable th, .clsNotificationsTable td {
  border: 1px solid #ccc;
  padding: 8px;
  text-align: left;
}

.alert-success, .alert-danger {
  padding: 10px;
  margin-bottom: 15px;
}

.alert-success {
  background-color: #d4edda;
  color: #155724;
}

.alert-danger {
  background-color: #f8d7da;
  color: #721c24;
}
/* Admin "Review Question Request" page (admin/question_requests/show.html.erb) —
   scoped to .admin-qr-review-page so this never bleeds into other pages that
   reuse the generic .clsAdminContainer/.clsFormGroup classes. */

.admin-qr-review-page {
  background: linear-gradient(135deg, #eef7ff, #f5f0ff);
  border: 2px solid #7c4dff;
  border-radius: 16px;
  padding-top: 20px;
  padding-bottom: 20px;
  box-shadow: 0 6px 16px rgba(124, 77, 255, 0.2);
}

/* .clsFormGroupCentered is a flex row with no gap sitewide — scoped here only,
   so label and control aren't jammed right up against each other. */
.admin-qr-review-page .clsFormGroupCentered {
  gap: 10px;
}

.admin-qr-card {
  background: #ffffff;
  border: 1px solid #d8c9ff;
  border-radius: 12px;
  padding: 14px 20px;
  margin: 0 auto 20px;
  max-width: 600px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}

/* Combined with .clsButton for higher specificity — question_request.css's
   own generic .clsButton { background-color: #007bff } compiles in later in
   the sitewide asset bundle and would otherwise win the tie. */
.clsButton.admin-qr-approve-btn {
  background-color: #28a745;
}

.clsButton.admin-qr-approve-btn:hover {
  background-color: #1e7e34;
}

/* Marks a field as required before the admin/moderator can approve —
   category is always required; the event-only fields (start/expiration
   date, state, GPS) get this class added/removed by JS as Events is
   selected/deselected. */
.admin-qr-review-page .qr-required-field {
  background-color: #fff9c4;
}

/* ===== Redesign 2026-10-12 (.qr2_*): admin-only red container, three numbered steps, stacks on a phone. ===== */
.qr2_page.admin-qr-review-page {
  max-width: min(1000px, 96vw);
  margin: 20px auto;
  padding: 16px 20px 20px;
  box-sizing: border-box;
  background: linear-gradient(160deg, #fff5f5, #fde3e3);
  border: 3px solid #c62828;
  border-radius: 20px;
  box-shadow: 0 6px 20px rgba(198, 40, 40, 0.15);
  text-align: left;
}
.qr2_head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 14px; margin-bottom: 10px; }
.qr2_head h1 { margin: 0; font-size: 1.5em; color: #8e1b1b; }
.qr2_status { padding: 3px 14px; border-radius: 999px; background: #fff3cd; border: 1px solid #ffc107; color: #856404; font-weight: bold; }

.qr2_from {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px;
  background: #fff; border: 1px solid #e0b4b4; border-radius: 14px; padding: 10px 16px; margin-bottom: 14px;
}
.qr2_label { color: #8e1b1b; font-weight: bold; }
.qr2_userlink { font-weight: bold; font-size: 1.1em; color: #0a58ca; text-decoration: underline; }
.qr2_when { color: #555; }

.qr2_card { background: #fff; border: 1px solid #e0b4b4; border-radius: 14px; padding: 14px 18px 16px; margin-bottom: 14px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06); }
.qr2_card h2 { margin: 0 0 10px; font-size: 1.15em; color: #8e1b1b; display: flex; align-items: center; gap: 8px; }
.qr2_step { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; background: #c62828; color: #fff; font-size: 0.9em; }
.qr2_approve { border-left: 8px solid #2e7d32; }
.qr2_reject  { border-left: 8px solid #c62828; background: #fff7f7; }

.qr2_field { margin-bottom: 12px; }
.qr2_field label { display: block; font-weight: bold; color: #333; margin-bottom: 4px; }
.qr2_field input[type="text"], .qr2_field input[type="datetime-local"], .qr2_field select, .qr2_field textarea {
  width: 100%; box-sizing: border-box; padding: 9px 11px; border: 2px solid #c9a0a0; border-radius: 10px; font: inherit; background: #fff;
}
.qr2_field input:focus, .qr2_field select:focus, .qr2_field textarea:focus { outline: none; border-color: #c62828; box-shadow: 0 0 0 3px rgba(198, 40, 40, 0.18); }
.qr2_big { font-size: 1.15em; font-weight: bold; }
.qr2_grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 0 16px; }
.qr2_note { margin: 0 0 10px; padding: 8px 12px; background: #fff9c4; border-radius: 10px; }
.qr2_actions { display: flex; flex-wrap: wrap; gap: 10px; }
.qr2_page .qr-required-field { background-color: #fff9c4; }

@media (max-width: 600px) {
  .qr2_page.admin-qr-review-page { padding: 12px 10px 16px; border-radius: 16px; }
  .qr2_card { padding: 12px 12px 14px; }
  .qr2_actions .clsButton, .qr2_actions input[type="submit"] { width: 100%; box-sizing: border-box; text-align: center; }
}

/* Where the suggestion will show (its parent question + trigger answer). */
.qr2_parent { margin: 0 0 14px; padding: 10px 14px; background: #e8f5e9; border: 2px solid #66bb6a; border-radius: 12px; line-height: 1.5; }
.qr2_parent_row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin-top: 6px; }
.qr2_parent_row select { width: auto; padding: 4px 10px; border: 2px solid #66bb6a; border-radius: 8px; font: inherit; background: #fff; }
.qr2_detach { display: block; margin-top: 8px; color: #7a1f1f; font-weight: normal; }

/* Parent question picker on the review page. */
.qr2_pickparent { position: relative; }
.qr2_results { position: absolute; z-index: 30; left: 0; right: 0; max-height: 260px; overflow-y: auto; background: #fff; border: 2px solid #c62828; border-radius: 10px; box-shadow: 0 6px 16px rgba(0,0,0,.2); }
.qr2_result { padding: 8px 12px; cursor: pointer; border-bottom: 1px solid #f0d6d6; }
.qr2_result:hover { background: #fde3e3; }
.qr2_none { color: #777; cursor: default; }
.qr2_chosen { margin-top: 8px; padding: 8px 12px; background: #e8f5e9; border: 2px solid #66bb6a; border-radius: 10px; }
.qr2_chosen select { width: auto; padding: 4px 10px; border: 2px solid #66bb6a; border-radius: 8px; font: inherit; background: #fff; }
.qr2_clearbtn { margin-left: 8px; background: none; border: none; color: #c62828; text-decoration: underline; cursor: pointer; font: inherit; }


.qr2_ask { border-left: 8px solid #0288d1; background: #f4faff; }
.qr2_ask textarea { width: 100%; box-sizing: border-box; }
/* app/assets/stylesheets/admin_question_requests_index.css
   Admin/moderator-only page (admin/question_requests/index.html.erb) — red-shaded
   background + bold red border instead of the site-wide blue .clsBlueContainer,
   same "this is admin-only" red convention as .qu_admin_container
   (admin_question_users.css) and .clsAdminOnlyBox/.clsAdminOnlyBadge elsewhere. */
.admin-qr-index-page.clsBlueContainer {
  background: #fdecea;
  border: 3px solid #c0392b;
}
/* app/assets/stylesheets/admin_question_users.css */
/* background was `var(--aa-bg)`, a variable that's never defined anywhere in
   the app — it resolved to transparent, so scrolled table rows showed
   through behind the sticky question text. Solid white fixes that without
   changing the box's height. */
.qu_sticky{position:sticky;top:0;background:#fff;padding:1rem;border-bottom:2px solid #333;z-index:10;}
.qu_header{
  display:flex;
  justify-content:space-between;
  align-items:center;
  font-size: 2rem;
  font-weight: 800;
}
.qu_table_wrap{overflow-x:auto;margin-top:1rem;}

/* Admin-only page — red-shaded background + bold red border instead of the
   site-wide blue .clsBlueContainer, same "this is admin-only" red convention
   as .clsAdminOnlyBox/.clsAdminOnlyBadge elsewhere. */
.qu_admin_container{
  background-color:#fdecea;
  border:2px solid #c0392b;
  border-radius:5px;
  padding:10px 20px;
}

.qu_table{width:100%;border-collapse:collapse;}
.qu_table th,.qu_table td{padding:0.8rem;text-align:left;border-bottom:1px solid #555;cursor:pointer;}
.qu_table th:hover{background:#333;}
.qu_table tbody tr:hover{background:#8b1a1a;}
.qu_table tbody tr:hover td{color:#fff !important;}
/* The Name column's <a> keeps its own default link color instead of
   inheriting the td's — without this, it stays dark-blue-on-navy on hover
   and is unreadable. */
.qu_table tbody tr:hover td a{color:#fff !important;}
.qu_search_row th{cursor:default;background:#f4f4f4;}
.qu_search_row th:hover{background:#f4f4f4;}
.qu_search_input{
  width:100%;
  box-sizing:border-box;
  padding:0.4rem 0.6rem;
  font-size:0.9rem;
  font-weight:normal;
  border:1px solid #ccc;
  border-radius:4px;
}
.qu_search_actions_cell{white-space:nowrap;}
.qu_search_btn_small{
  padding:0.3rem 0.5rem;
  font-size:0.9rem;
  border:1px solid #ccc;
  border-radius:4px;
  background:#fff;
  cursor:pointer;
  margin-right:4px;
}
.qu_search_btn_small:hover{background:#eee;}

.qu_btn{padding:0.4rem 0.8rem;font-size: 1rem;margin:0.2rem;border-radius:16px;display:inline-block;}
.qu_edit{background:#0066cc;color:white;}
.qu_add{background:#00aa00;color:white;}

/* Narrower browser windows (not just full mobile card view below) — let the
   Email column wrap onto two lines instead of forcing the whole table wider
   than the viewport. */
@media(max-width:900px){
  .qu_table td:nth-child(3){
    max-width:140px;
    white-space:normal;
    word-break:break-word;
  }
}

@media(max-width:640px){
  .qu_table thead{display:none;}
  .qu_table tbody tr{display:grid;grid-template-columns:1fr;gap:0.5rem;padding:1rem;background:#111;}
  .qu_table td:before{content:attr(data-label);font-weight:bold;display:block;}
  .qu_table td[data-label]:before{content:attr(data-label) ": ";}
}
.aq_error-container {
  background-color: #ffcccc;
  padding: 10px;
}

/* .clsButton's fixed height (40px) doesn't vertically center a <button>,
   <a>, and <input type="submit"> identically across browsers — flexbox
   guarantees the label sits centered top-to-bottom in every button on this
   page, without changing the shared .clsButton used site-wide. */
#aq_edit_container .clsButton {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* "Guess Time Zone from GPS / State" label is too long for the shared
   .clsButton's fixed 40px height + .clsSmallButton's tight padding — it was
   wrapping and getting clipped. Let it grow instead. */
#aq_guess_timezone_btn,
#aq_check_timezone_link {
  height: auto;
  min-height: 40px;
  padding: 8px 16px;
  line-height: 1.3;
  white-space: normal;
}

/* Let the Edit Question page use more of a wide browser window (the shared
   .clsBlueContainer used site-wide has a fixed 20px margin; this page-only
   id widens it here without touching any other page that uses that class). */
#aq_edit_container,
#aq_new_container {
  max-width: min(1400px, 96vw);
  margin-left: auto;
  margin-right: auto;
}

/* Admin-only page — red-shaded background + bold red border instead of the
   site-wide blue .clsBlueContainer, same "this is admin-only" red convention
   used elsewhere (e.g. .clsAdminOnlyBox). Edit only, not the New Question
   page (#aq_new_container), which wasn't asked for. */
#aq_edit_container.clsBlueContainer {
  /* `background` (not just background-color) so it replaces the blue
     gradient .clsBlueContainer paints as a background-image. */
  background: linear-gradient(160deg, #fff5f5, #fde3e3);
  border: 3px solid #c0392b;
  box-shadow: 0 6px 20px rgba(198, 40, 40, 0.15);
}

/* Top of the Edit Question page: title + admin-only pill on the left, the
   action buttons on the right; wraps on narrow screens. */
.aq_edit-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 10px 16px;
  margin: 6px 0 16px;
  padding-bottom: 12px;
  border-bottom: 2px dashed #e0b4b4;
}
.aq_edit-header-title {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 14px;
}
.aq_edit-header h1 {
  margin: 0;
  font-size: 1.6em;
  color: #8e1b1b;
}
.aq_edit-badge {
  padding: 3px 12px;
  border-radius: 999px;
  background: #fff;
  border: 2px solid #c0392b;
  color: #c0392b;
  font-weight: bold;
  font-size: 0.8em;
  letter-spacing: 0.03em;
}
.aq_edit-header-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
@media (max-width: 600px) {
  .aq_edit-header { flex-direction: column; align-items: stretch; }
  .aq_edit-header h1 { font-size: 1.35em; }
  .aq_edit-header-actions .clsButton { flex: 1 1 0; text-align: center; box-sizing: border-box; }
}

/* Wide-screen field layout for the Edit Question form: fields sit side by
   side when there's room, and stack to one column on narrow screens. Text
   areas, the tags picker, image, location header, and parent-question row
   are marked .aq_full-width so they always span the whole row. */
.aq_field-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 4px 32px;
  align-items: start;
}
.aq_field-grid > p {
  margin: 0 0 16px 0;
  min-width: 0;
}
.aq_field-grid > p.aq_full-width {
  grid-column: 1 / -1;
}

/* Parent Question + Trigger Answer, combined into one grid item that spans 2
   of the grid's own auto-fit columns (so it takes up the same width as two
   normal fields side by side, at any screen width where 2+ columns fit),
   with the pair laid out side-by-side inside via flex — they no longer
   depend on the grid happening to place them in adjacent columns on its own,
   which is what let them land in separate columns/lines before. */
.aq_field-grid > .aq_parent-trigger-row {
  grid-column: span 2;
  margin: 0 0 16px 0;
  display: flex;
  flex-wrap: wrap;
  gap: 4px 32px;
  align-items: flex-start;
}
.aq_parent-trigger-row > .aq_parent-question-picker,
.aq_parent-trigger-row > .aq_trigger-answer-field {
  margin: 0;
  min-width: 0;
}
/* The site-wide `p { padding-left: 10px; padding-right: 10px; }` rule
   (application.css) is what actually indents every other field's label/input
   — .aq_trigger-answer-field already gets it for free since it's still a
   <p>, but .aq_parent-question-picker is a <div> (has to be, since it
   contains other divs — see the phantom-empty-<p> fix), so it needs the same
   padding set explicitly to line up with every sibling field. */
.aq_parent-trigger-row > .aq_parent-question-picker {
  padding-left: 10px;
  padding-right: 10px;
}
/* application.css has a site-wide `select { width: fit-content; }` rule, so
   every select sizes to its own option text by default — Category/Question
   Type just have long enough option text that this isn't obvious, but
   Trigger Answer's short options ("Yes"/"No"/"Skip"/"Pick a Parent Question
   first") made it visibly narrower than every text-input field (which fill
   100% via .au_clsFormInput). Same fix applied to Question Type + Category
   on both pages, since they have the identical underlying issue — scoped to
   just these fields rather than overriding the global select rule, which
   may be intentional elsewhere on the site. an_clsFormSelect only exists on
   the New page's Question Type/Category; the Edit page has no shared class
   for those two, so they're targeted by their (Rails-default/explicit) ids. */
#aq_trigger_answer_select,
.an_clsFormSelect,
#question_type_select,
#question_f_CategoryID {
  width: 100%;
}
/* Equal split — each field then gets the same width as a single normal grid
   column (the row spans 2 columns total), instead of Parent Question's text
   input stretching wider than fields like Country/State/County. */
.aq_parent-trigger-row > .aq_parent-question-picker,
.aq_parent-trigger-row > .aq_trigger-answer-field {
  flex: 1 1 0;
}

/* Rails wraps any field that has a validation error (its label AND its input)
   in a block-level <div class="field_with_errors">, which knocked the label onto
   its own line away from the textbox. display: contents makes the wrapper
   disappear from layout so label + input sit exactly as they do without an error. */
.aq_field-grid .field_with_errors,
#aq_edit_container .field_with_errors,
#aq_new_container .field_with_errors {
  display: contents;
}

/* Guard against phone-width overflow: several fields use HTML `size`/`cols`
   attributes (size="30", size="40", size="60x4") which set an intrinsic
   character width that can be wider than a phone screen once the container's
   padding/margin is subtracted. Force them to respect the grid column
   instead of pushing the page into horizontal scroll. */
.aq_field-grid input[type="text"],
.aq_field-grid input[type="number"],
.aq_field-grid input[type="datetime-local"],
.aq_field-grid select,
.aq_field-grid textarea {
  box-sizing: border-box;
  max-width: 100%;
}

/* Floating Save button, always visible in the bottom-right of the viewport,
   in addition to (not instead of) the normal in-form Save button. */
.aq_fixed-save {
  position: fixed;
  right: 24px;
  bottom: 24px;
  z-index: 1000;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: normal;
}

/* The whole grid goes single-column here, not just Parent Question/Trigger
   Answer — that pair just happens to need it earliest (they were cutting
   off text under ~670px), but every field should stack together at this
   width, not just those two. */
@media (max-width: 670px) {
  .aq_field-grid {
    grid-template-columns: 1fr;
    gap: 0;
  }
  /* Only 1 column exists now — span 2 would force the grid to add an extra
     column just to satisfy it, breaking the single-column layout. */
  .aq_field-grid > .aq_parent-trigger-row {
    grid-column: 1 / -1;
    flex-direction: column;
    /* align-items controls the *cross* axis — once flex-direction is column
       that's horizontal, so the row's default flex-start was shrinking both
       fields to their content width instead of the full row width every
       other stacked field gets. */
    align-items: stretch;
    /* The row's own gap (4px 32px) only gives 4px between the two stacked
       fields — every other stacked field gets 16px via its own margin-bottom
       (.aq_field-grid > p). Match that here since these two don't have that
       margin (it's zeroed out so they can sit side-by-side above 670px). */
    gap: 16px;
  }
}

@media (max-width: 480px) {
  #aq_edit_container,
  #aq_new_container {
    max-width: 100%;
  }
  .aq_fixed-save {
    right: 12px;
    bottom: 12px;
    padding: 10px 18px;
  }
}

/* Daily Question Schedule table: on a phone-width screen, a 4-column table
   forces either sideways scrolling or squished, hard-to-read text. Instead,
   each row becomes its own stacked card — the column header is shown as a
   label in front of each value, one field per line, everything wraps. */
@media (max-width: 600px) {
  .aq_dq-table thead {
    display: none;
  }
  .aq_dq-table, .aq_dq-table tbody, .aq_dq-table tr, .aq_dq-table td {
    display: block;
    width: 100%;
  }
  .aq_dq-table tr {
    margin-bottom: 12px;
    border: 1px solid #ddd;
    border-radius: 6px;
    padding: 4px 0;
  }
  .aq_dq-table td {
    white-space: normal !important;
    padding: 6px 10px !important;
  }
  .aq_dq-table td::before {
    content: attr(data-label);
    display: block;
    font-size: 0.8em;
    font-weight: bold;
    color: #666;
    margin-bottom: 2px;
  }
  .aq_dq-table td[data-label="Actions"] {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
  }
  .aq_dq-table td[data-label="Actions"]::before {
    width: 100%;
  }
}
.aq_answer-options-section {
  margin-top: 20px;
  padding: 10px;
  /* It is a direct child of the field grid, so without this it sat in ONE narrow column, off to the side/below the Question
     Type and cut off. Now it takes the whole row, directly under Question Type, at any width. */
  grid-column: 1 / -1;
  min-width: 0;
  box-sizing: border-box;
  text-align: left;
}
.aq_answer-option {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: center;
  margin-bottom: 10px;
  border: 1px solid #ccc;
  padding: 5px;
  background-color: #fff;
  box-sizing: border-box;
  max-width: 100%;
}
/* The text box takes the leftover width (it had a fixed size="30" that overflowed the blue box); the sort number stays small. */
.aq_answer-option input[type="text"] { flex: 1 1 200px; min-width: 0; width: auto; }
.aq_answer-option input[type="number"] { flex: 0 0 110px; min-width: 0; }

/* app/assets/stylesheets/admin_questions.css */
.aq_admin-questions-stats {
  padding: 20px;
}

form input[type="text"] {
  margin-right: 5px;
}
/* Same "every column always stays visible, no matter the browser width"
   pattern as .clsUserTableWrapper/.clsUserTable on the admin Users page
   (admin_users.css) — a horizontally + vertically scrollable wrapper with a
   sticky header, and table-layout: fixed + a <colgroup> so columns shrink
   together as the window narrows instead of any of them getting hidden or
   the table quietly overflowing the page. */
.aq_question-table-wrapper {
  overflow-x: auto;
  /* No max-height / inner vertical scrolling any more: the whole page scrolls, not the table box (removed at the admin's request). */
  width: 100%;
  margin-top: 0;
}

.aq_question-table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
}

.aq_question-table {
  width: 100%;
  table-layout: fixed;
  border-collapse: collapse;
  background-color: #f0f8ff;
  border-radius: 8px;
}

.aq_colEdit         { width: 80px; }
.aq_colPriority     { width: 90px; }   /* fixed: roomy enough for a 4-digit number and the "Priority" title/search box, not a shrinking % */
.aq_colCategory     { width: 8%; }
.aq_colQuestion     { width: 18%; }
.aq_colQotd         { width: 7.5em; }   /* wide enough for "MM/DD/YYYY" on one line (time + MST under it), not a squeezed % */
.aq_colEventStart   { width: 7.5em; }
.aq_colExpiration   { width: 7.5em; }
.aq_colType         { width: 6%; }
.aq_colParentId     { width: 6%; }
.aq_colAnswerCount  { width: 6%; }
.aq_colTrigger      { width: 7%; }
.aq_colTags         { width: 8%; }
.aq_colActive       { width: 4%; }
.aq_colDelete       { width: 64px; }
.aq_colDateAdded    { width: 7.5em; }   /* "MM/DD/YY" on line 1, time + zone on line 2 */

.aq_question-table th, .aq_question-table td {
  text-align: left;
  padding: 6px 8px;
  border-bottom: 1px solid #ddd;
  box-sizing: border-box;
  white-space: normal;
  overflow-wrap: break-word;
}
.aq_question-table th {
  background-color: #0288d1;
  color: white;
  text-align: center;
}

/* Half-screen and narrow: same as admin_users.css — columns keep shrinking
   and text wraps onto extra lines instead of anything being hidden. The
   wrapper's overflow-x: auto above is the fallback for extreme cases. */
@media (min-width: 600px) and (max-width: 960px) {
  .aq_question-table th, .aq_question-table td {
    padding: 4px 6px;
  }
  .aq_question-table {
    font-size: 0.85em;
  }
}

@media (max-width: 599px) {
  .aq_question-table th, .aq_question-table td {
    padding: 4px 6px;
  }
  .aq_question-table {
    font-size: 0.8em;
  }
}

/* Per-column search row (search_id, search_category, search_question, etc.)
   at the top of the table — one small text input per searchable column,
   plus a Search/Clear pair in the Edit column's slot. */
.aq_clsColumnSearchRow th {
  background-color: #ffffff;
  padding: 4px 6px;
}

.aq_clsColumnSearchInput {
  width: 100%;
  min-width: 60px;
  box-sizing: border-box;
  padding: 5px 6px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 0.85em;
  color: #222;
}

.clsButton.aq_clsColumnSearchBtn {
  display: block;
  width: 100%;
  height: auto;
  margin: 0 0 4px 0;
  padding: 4px 6px;
  font-size: 0.8em;
}

.clsButton.aq_clsColumnSearchBtn:last-child {
  margin-bottom: 0;
}
.aq_question-table tr:hover {
  background-color: #e0f0ff;
}
#idDebugInfo {
  background-color: #fff3cd;
  padding: 10px;
  border-radius: 5px;
  margin: 10px 0;
  text-align: left;
}
.q_clsSearchForm {
  margin: 15px 0;
  display: flex;
  gap: 10px;
  justify-content: center;
  align-items: center;
}


.sort-link {
  color: white;
  text-decoration: none;
}
.sort-link:hover {
  color: #e0f0ff;
  text-decoration: underline;
}

.clsAdminContainer {
  margin: 20px auto;
  padding: 20px;
}

/* Scoped to this page only — pull the title up a bit, less whitespace above it. */
.aq_index-page h1 {
  margin-top: 0;
  margin-bottom: 6px;
}

/* "Add, edit, or delete..." blurb + Add New Question button share a line to
   save vertical space instead of the button sitting in its own row below. */
.aq_index-header-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 6px;
}
.aq_index-header-row p {
  margin: 0;
}

/* Collapsed by default — an admin doesn't need the search-syntax reminder on
   every visit; same "Admin View Only" dashed convention used elsewhere. */
.aq_index-tips {
  margin: 0 0 10px;
}
.aq_index-tips summary {
  cursor: pointer;
  font-weight: bold;
  color: #6c757d;
  font-size: 0.85em;
}
.aq_index-tips p {
  margin-top: 6px;
}

.aq_result-count {
  color: #555;
  font-size: 0.9em;
  margin: 0 0 8px;
}

.aq_show-expired-toggle {
  margin: 4px 0 8px;
}
.aq_show-expired-toggle label {
  cursor: pointer;
  color: #555;
}

/* Whole page is admin-only — shade the container red/bordered instead of the
   default site-wide blue, same "this is restricted" convention used for
   admin-only badges/boxes elsewhere (see docs/design.md "Admin-only
   marking"). Compound selector (two classes) so it reliably beats the
   later-loaded, single-class .clsBlueContainer rule in application.css
   regardless of file concatenation order. */
.aq_index-page.clsBlueContainer {
  background: linear-gradient(160deg, #fff5f5, #fdecea);
  border: 3px solid #c0392b;
}


.q_clsSearchForm {
  display: flex !important;
  gap: 10px;
  flex-wrap: wrap;
  align-items: center;
  margin-bottom: 15px;
}

/* Expired questions – grey background */
.aq_question-table tr.expired {
  background-color: #8b8686 !important;
}

/* Optional: slightly darker on hover so it still feels interactive */
.aq_question-table tr.expired:hover {
  background-color: #4e4141 !important;
}

/* Inactive questions (IsActive = No) – soft red background. Expired (grey) wins if a question is both. */
.aq_question-table tr.inactive {
  background-color: #ffcdd2 !important;
}
.aq_question-table tr.inactive:hover {
  background-color: #ef9a9a !important;
}

/* Colour key (show/hide) above the questions table. */
.aq_legend { margin: 4px 0 8px; font-size: 0.9em; }
.aq_legend summary { cursor: pointer; font-weight: bold; display: inline-block; padding: 3px 10px; border: 1px solid #999; border-radius: 6px; background: #fff; }
.aq_legend-body { margin-top: 6px; padding: 8px 12px; background: #fff; border: 1px solid #ccc; border-radius: 8px; }
.aq_legend-item { display: flex; align-items: center; gap: 8px; margin: 4px 0; }
.aq_legend-swatch { display: inline-block; width: 28px; height: 16px; border: 1px solid #666; border-radius: 3px; flex: none; }

/* Parent Question type-ahead picker (Admin Add/Edit Question). */
.aq_parent-question-picker {
  position: relative;
}

/* position:fixed with top/left/width set in JS from the search input's own
   getBoundingClientRect() (see the script at the bottom of edit.html.erb) —
   this used to be position:absolute anchored to .aq_parent-question-picker,
   which rendered the list up near the top of the page instead of under the
   search box (likely the grid/ancestor layout on this page not giving it the
   containing block it needed). Fixed positioning computed directly from the
   input's real screen location sidesteps that entirely. */
.aq_parent-question-suggestions {
  position: fixed;
  z-index: 1000;
  background: #fff;
  border: 1px solid #ccc;
  border-radius: 6px;
  max-height: 220px;
  overflow-y: auto;
  box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}

.aq_parent-question-suggestion {
  padding: 8px 12px;
  cursor: pointer;
  border-bottom: 1px solid #eee;
  font-size: 0.95em;
}

.aq_parent-question-suggestion:last-child {
  border-bottom: none;
}

.aq_parent-question-suggestion:hover {
  background-color: #e3f2fd;
}

.aq_parent-question-suggestion-empty {
  color: #888;
  cursor: default;
}

.aq_parent-question-suggestion-empty:hover {
  background-color: transparent;
}

.aq_parent-question-selected {
  margin-top: 6px;
  padding: 8px 12px;
  background-color: #e3f2fd;
  border: 1px solid #90caf9;
  border-radius: 6px;
  font-size: 0.9em;
}

.aq_parent-question-clear {
  margin-left: 8px;
  border: none;
  background: none;
  color: #c0392b;
  cursor: pointer;
  font-size: 0.9em;
}


/* Save button at the bottom of the Edit Question form: a bit bigger than the default 40px button,
   with the label centered top to bottom (explicit height, no vertical padding, so the text
   doesn't sit low inside the <input>). */
.clsButton.aq_save-btn {
  height: 50px;
  padding: 0 40px;
  font-size: 1.15em;
  line-height: 50px;
}

/* Yellow highlight for a field that needs the admin's attention — State/Province
   while required (Events category) and not yet filled in (see the
   aq_category_select/aq_location_state toggle script below), and Event Start Date
   when it's after the Expiration date (see edit.html.erb). */
.aq-required-field {
  background-color: #fff9c4;
}


/* Icon field: a wide-enough box to see what you type, with the explanation beside it
   on wide screens (stacked underneath on narrow ones). */
.aq_field-grid > .aq_icon-row {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 6px 20px;
  margin: 0 0 16px 0;
}
.aq_icon-field { flex: 0 0 auto; }
.aq_icon-input { width: 11em; max-width: 100%; box-sizing: border-box; }
.aq_icon-help {
  flex: 1 1 320px;
  min-width: 0;
  color: #666;
  line-height: 1.4;
  padding-top: 22px;
}
@media (max-width: 700px) {
  .aq_icon-help { padding-top: 0; flex-basis: 100%; }
}

/* New Question page only: line the Icon label + box up with the other grid fields
   (same left edge, same label-then-input stacking, same 16px bottom margin), and
   sit the help text on the input's baseline row. */
#aq_new_container .aq_icon-row {
  align-items: flex-end;
}
#aq_new_container .aq_icon-field {
  margin: 0 0 0 1ch; /* nudge label + box right about one character */
}
#aq_new_container .aq_icon-field .aq_icon-input {
  width: 11em;
  display: block;
  box-sizing: border-box;
}
#aq_new_container .aq_icon-help {
  padding-top: 0;
  padding-bottom: 8px;
}

/* Edit Question page only: nudge the Icon label + box right about one character
   (same nudge as the New Question page above). */
#aq_edit_container .aq_icon-field {
  margin-left: 1ch;
}

/* Edit Question page: Priority sits to the right of the Question box when the
   window is wide enough, and drops underneath it when it isn't. */
#aq_edit_container .aq_question-priority-row,
#aq_new_container .aq_question-priority-row {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 4px 32px;
}
#aq_edit_container .aq_question-priority-row > p,
#aq_new_container .aq_question-priority-row > p {
  margin: 0 0 16px 0;
  min-width: 0;
}
#aq_edit_container .aq_question-cell { flex: 0 1 auto; }
/* New page's textarea is width:100% (au_clsFormInput), which made this cell claim the
   whole row and push Priority underneath. Let it take the leftover width instead. */
#aq_new_container .aq_question-cell { flex: 1 1 400px; }
#aq_edit_container .aq_priority-cell,
#aq_new_container .aq_priority-cell { flex: 0 0 auto; }
#aq_new_container .aq_priority-cell input { width: 8em; }

/* Manage Questions: compact header area (docs/design.md, "Admin pages: compact header area").
   Title + blurb + Add button share one row; Show expired, Columns, Search Tips and the
   "Showing N of M" count share one small-font toolbar row instead of four stacked lines. */
.aq_index-page {
  padding-top: 2px;
}
.aq_index-page h1 {
  font-size: 1.15em;
  margin: 2px 0;
}
.aq_index-header-row {
  justify-content: flex-start;
  gap: 4px 16px;
  margin-bottom: 2px;
  font-size: 0.85em;
}
.aq_index-header-row .clsButton {
  height: 28px;
  margin: 0 0 0 auto;
  padding: 2px 12px;
  font-size: 0.95em;
}
.aq_index-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 18px;
  font-size: 0.85em;
  margin: 2px 0 6px;
}
.aq_index-toolbar > p,
.aq_index-toolbar > details {
  margin: 0;
}
.aq_index-toolbar .aq_cols-menu { font-size: 1em; }
.aq_index-toolbar .aq_cols-menu summary { padding: 1px 8px; }
.aq_index-toolbar .aq_index-tips summary { font-size: 1em; }
.aq_index-toolbar details[open] { flex-basis: 100%; }
.aq_index-toolbar .aq_result-count {
  margin: 0 0 0 auto;
  font-size: 1em;
}

/* When the admin has hidden columns (Columns menu), the leftover width goes to Question — in a
   table-layout:fixed table the extra otherwise gets spread over every column, ballooning Edit
   and squeezing Question. Edit/Delete keep their fixed 64px. */
.aq_question-table.aq_cols-customized .aq_colQuestion {
  width: auto;
}
/* Delete column: the buttons keep their whole word on one line. With columns hidden the column is a bit wider (Question, which takes
   the leftover width, gets a bit narrower); while picking a QOTD it's wider still, to fit "Set as QOTD" too. */
.aq_question-table .aq_delete-cell .clsButton { white-space: nowrap; }
.aq_question-table.aq_cols-customized .aq_colDelete { width: 90px; }
.aq_question-table.aq_assigning .aq_colDelete,
.aq_question-table.aq_assigning.aq_cols-customized .aq_colDelete { width: 140px; }
/* admin_user_events.css – styles for user_events page */
.admin-events-table {
  width: 100%;
  border-collapse: collapse;
  margin: 1.5rem 0;
}

.admin-events-table th {
  background: #333 !important;
  color: #fff !important;
  font-weight: bold;
  text-shadow: 0 1px 1px rgba(0,0,0,0.4);
}

.admin-events-table th:hover {
  background: #444 !important;
}


.admin-events-table td {
  border: 1px solid #ddd;
  padding: 10px;
  text-align: left;
}

.admin-events-table th {
  background: #f4f4f4;
  font-weight: bold;
}


.answered { background: #e8f5e9; }
.unanswered { background: #fff3e0; }

.clsSmallButton {
  padding: 6px 12px;
  font-size: 1em;
}
/* app/assets/stylesheets/admin_user_notifications.css */

.admin-notifications-table {
  width: 100%;
  border-collapse: collapse;
  margin-top: 1.5rem;
}

.admin-notifications-table th,
.admin-notifications-table td {
  padding: 10px;
  border: 1px solid #ddd;
  text-align: left;
}

.admin-notifications-table th {
  background-color: #f2f2f2;
  font-weight: bold;
  color: #000;          /* black text for headings */
}

.admin-notifications-table tr:nth-child(even) {
  background-color: #f9f9f9;
}
.sort-link {
  text-decoration: none;
  color: inherit;
}

.sort-link:hover {
  text-decoration: underline;
}
.sort-link {
  text-decoration: none;
  color: inherit;
  display: block;
}

.sort-link:hover {
  text-decoration: underline;
  color: #0066cc;
}
/* app/assets/stylesheets/admin_users.css */

.au_clsEditLayout {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 24px;
  align-items: start;
}

.au_clsEditMain {
  min-width: 0;
}

.au_clsEditSidebar {
}

.au_clsGpsSection {
  display: flex;
  flex-direction: column;
  border: 1px solid #dee2e6;
  border-radius: 6px;
  padding: 0 12px 12px;
  background-color: #f8f9fa;
}
/* This div also carries the site-wide .clsFormRow class, which sets
   gap: 20px (application.css) — that pushed the title away from the map
   below it. .au_clsGpsTitle's own margin-bottom already gives the title
   its intended spacing, so the flex gap here should be 0. Element+class
   selector (not just .au_clsGpsSection) so this reliably beats .clsFormRow's
   gap regardless of which file Sprockets happens to bundle last. */
div.au_clsGpsSection {
  gap: 0;
}

.au_clsGpsTitle {
  margin: 0 0 10px;
  font-size: 15pt;
}

.au_clsGpsBody {
  display: flex;
  flex-direction: column;
  gap: 16px;
  align-items: center;
}

.au_clsGpsControls {
  display: flex;
  flex-direction: column;
  gap: 12px;
  flex-shrink: 0;
  width: 100%;
  max-width: 480px;
}

.au_clsGpsControls > div {
  flex-grow: 0;
  flex-shrink: 0;
}

.au_clsGpsLatLngRow {
  display: flex;
  gap: 12px;
}

.au_clsGpsLatLngRow .app_clsFormField {
  flex: 1;
  min-width: 0;
}

.au_clsGpsSearchRow {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-top: auto;
  padding-top: 12px;
}

.au_clsLocationSearch {
  flex: 1;
  min-width: 0;
  padding: 6px 10px;
  border: 1px solid #ced4da;
  border-radius: 4px;
  font-size: 15pt;
}

.au_clsEditMap {
  flex-shrink: 0;
  width: 480px;
  height: 480px;
  border-radius: 4px;
  border: 1px solid #dee2e6;
}

.au_clsMapSection {
  margin-bottom: 4px;
  padding: 8px 15px;
}

/* The Hide/Show Map button is a .clsButton, which carries its own
   margin: 10px globally (application.css) — same issue as the New User
   button elsewhere on this page: that margin still pads out the header
   row even though the row itself and this container are already tight. */
#au_map_toggle {
  margin: 0;
}

.au_clsMapHeaderRow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 4px;
}

/* .clsBlueContainer carries a 20px margin globally — collapses fine against
   the page background, but stacked back-to-back on this page it leaves an
   oversized gap above the users table. Tighten just that gap here.
   (Uses ~ rather than + — a <script> tag sits between the two containers
   in the DOM, so the immediate-sibling + selector never actually matched.) */
.au_clsMapSection ~ .clsBlueContainer {
  margin-top: 4px;
}

.au_clsMap {
  height: 260px;
  width: 100%;
  max-width: 650px;
  border-radius: 6px;
  border: 1px solid #dee2e6;
}

.au_clsMapCount {
  margin-top: 6px;
  font-size: 15pt;
  color: #6c757d;
}
.toast.alert {
  position: fixed;
  top: 20px;
  right: 20px;
  z-index: 1050;
  background-color: #f8d7da;
  color: #721c24;
  border: 1px solid #f5c6cb;
  padding: 15px;
  border-radius: 5px;
}

.clsAlert {
  background-color: #f8d7da;
  color: #721c24;
  border: 1px solid #f5c6cb;
  padding: 15px;
  border-radius: 5px;
  margin-bottom: 15px;
}

.clsForm {
  margin: 0 auto;
}

.clsFormRow {
  margin-bottom: 15px;
}

/* UserID/Name/Email share a row via the generic .app_clsFormField flex:1 —
   UserID barely needs the space (a short number), so give it less and let
   Email (often the longest value here) take the room freed up from it. */
.au_clsUserIdField {
  flex: 0.5;
}

.au_clsEmailField {
  /* min-width forces this onto its own line (via .clsFormRow's flex-wrap)
     once UserID+UserName+Email can't all fit, and flex: 2 1 320px then lets
     it grow to fill that full line so the whole email is visible. */
  flex: 2 1 320px;
  min-width: 280px;
}

.au_clsEmailField input[type="text"] {
  width: 100%;
  box-sizing: border-box;
}

.app_clsFormField input[type="text"],
.app_clsFormField input[type="number"],
.app_clsFormField input[type="password"],
.app_clsFormField input[type="datetime-local"],
.app_clsFormField textarea {
  border-radius: 6px;
  border: 1px solid #ced4da;
  padding: 6px 10px;
}

.clsFormLabel {
  font-weight: bold;
}

.au_clsFormInput {
  width: 100%;
  padding: 8px;
  border: 1px solid #ced4da;
  border-radius: 4px;
  background-color: #fff;
}

.au_clsFormSelect {
  width: 100%;
  padding: 8px;
  border: 1px solid #ced4da;
  border-radius: 4px;
  background-color: #fff;
}

.clsFormCheckbox {
  margin-left: 5px;
}

.tags-container {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.tag-checkbox {
  display: flex;
  align-items: center;
  gap: 5px;
}

.au_clstags-input-container {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  align-items: center;
}

#id_tag-input {
  width: 100% !important;
  max-width: 300px;
  border-radius: 6px;
  border: 1px solid #ced4da;
  padding: 6px 10px;
}

.au_clstags-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-bottom: 5px;
  width: 100%;
}

.au_clstag-chip {
  background-color: #6c757d;
  color: white;
  padding: 5px 10px;
  border-radius: 15px;
  font-size: 15pt;
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.au_clsremove-tag {
  cursor: pointer;
  color: #dc3545;
  font-weight: bold;
}

.au_form-control {
  width: 100%;
  max-width: 400px;
}

.badge.bg-secondary {
  background-color: #6c757d;
  color: white;
  padding: 0.25rem 0.5rem;
  border-radius: 0.25rem;
}

.au_clstag-suggestions {
  position: absolute;
  background-color: white;
  max-height: 200px;
  overflow-y: auto;
  z-index: 1000;
  width: 100%;
  max-width: 300px;
  margin-top: 5px;
}

.au_clstag-suggestion {
  padding: 8px 12px;
  cursor: pointer;
  font-size: 15pt;
}

.au_clstag-suggestion:hover {
  background-color: #e9ecef;
}

.au_deceased-user {
  background-color: #f8d7da;
}

.clsBlueContainer {
  padding: 15px;
  box-sizing: border-box;
}

/* Flags the "Create New User" form as an admin-only page — overrides the
   shared blue styling with red, scoped to this page only via the extra
   class on the wrapping div (see admin/users/new.html.erb). Combined
   selector (not just .au_clsAdminOnlyContainer alone) so this outranks
   application.css's own base .clsBlueContainer rule, which — via
   require_self — compiles in *after* this file and would otherwise win
   the cascade despite equal specificity. */
.clsBlueContainer.au_clsAdminOnlyContainer {
  background: linear-gradient(160deg, #fff5f5, #fde3e3);
  border: 3px solid #c62828;
  box-shadow: 0 6px 20px rgba(198, 40, 40, 0.15);
}

/* Centers the "Create User" submit button's text top-to-bottom. The shared
   .clsButton rule only handles horizontal centering (text-align); flexbox
   alignment doesn't reliably affect an <input type="submit">'s value text
   across browsers since it isn't exposed as a flex child, so match
   line-height to the button's content height instead (40px height minus
   the rule's 10px top/bottom padding, box-sizing: border-box = 20px). */
.clsButton.au_clsCreateUserButton {
  line-height: 20px;
}

.clsSearchActions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: center;
  margin-bottom: 15px;
}

.au_clsPageTitle {
  font-size: 1.3em;
  margin-top: 4px;
  margin-bottom: 6px;
}

.au_clsToolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-start;
  gap: 12px;
  margin: 0;
}

/* The New User button is a .clsButton, which carries its own margin: 10px
   globally (application.css) — that's extra space the flex container above
   still has to make room for even though the container's own margin is 0. */
.au_clsToolbar .clsButton {
  margin: 0;
}

.au_clsToolbar p {
  margin: 0;
}

/* application.css has its own unrelated .clsSearchForm rule (margin: 15px 0;
   display: inline-block;) used for a different search form elsewhere on the
   site. Its own rules always compile in LAST (require_self loads after
   require_tree), so at equal specificity it was silently winning here and
   adding a 15px gap above this table. Scope to this page's wrapper so it
   can't be re-overridden the same way again. */
.clsUserTableWrapper .clsSearchForm {
  width: 100%;
  display: block;
  margin: 0;
}

.au_clsSearchInput {
  width: 100%;
  box-sizing: border-box;
  padding: 6px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 0.85em;
}

/* Search/Clear buttons in the table header — without this they inherit the
   base .clsButton size (12px 24px padding, 15pt font) and bloat the whole
   header row (every cell in a table row is forced to the height of the
   tallest cell), which reads as a big blank gap under the toolbar above it.
   Keep them side by side rather than stacked so the cell — and therefore
   the whole row — stays as short as the plain search-input cells next to it. */
/* .clsButton (below, and its global copy in application.css) sets its own
   padding: 12px 24px, font-size: 15pt, height: 40px and margin: 10px —
   at equal specificity those load later and silently win over a plain
   .au_clsSearchBtn rule, which is why these kept rendering oversized.
   Combine the class names here so this always wins regardless of source
   order, and size them to just fit the label instead of the base button size. */
/* .clsSearchForm .clsButton (below) sets display: block; margin: 0 auto —
   meant for some other button, but it also matches Search/Clear since
   they're inside .clsSearchForm too, and at equal specificity it loads
   later and wins, stretching the button to fill the whole cell width.
   Scope this selector the same way so it wins regardless of order. */
.clsSearchForm .clsButton.au_clsSearchBtn {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 20px;
  width: 100%;
  padding: 0;
  font-size: 0.7em;
  margin: 0 0 3px 0;
  box-sizing: border-box;
  border: 1px solid #0056b3;
}

.clsSearchForm .clsButton {
  margin: 0 auto;
  display: block;
}

.clsButton {
  padding: 12px 24px;
  font-size: 15pt;
  border-radius: 4px;
  touch-action: manipulation;
  background-color: #007bff;
  color: white;
  border: none;
  cursor: pointer;
}

.clsButton.clsBlueButton {
  background-color: #007bff;
}

.clsButton.au_clsRedButton {
  background-color: #dc3545;
}

/* The table sizes its own columns by content (table-layout: auto) so it
   naturally shrinks and grows with the browser width. On narrow screens this
   wrapper scrolls horizontally rather than crushing every column down to an
   unreadable fixed pixel width; below 768px the table switches to stacked
   cards instead (see the mobile media query below) so scrolling isn't
   needed there at all. */
/* Bounding the height here (instead of letting the wrapper grow to fit every
   row) keeps its horizontal scrollbar right below the visible rows, near the
   top of the page — without this, the scrollbar sits at the very bottom of
   the full table, which could be many rows down, forcing a scroll all the
   way down just to reach it. */
.clsUserTableWrapper {
  overflow-x: auto;
  /* No max-height / inner vertical scrolling any more: the whole page scrolls, not the table box (removed at the admin's request). */
  width: 100%;
  margin-top: 0;
}

.clsUserTable thead th {
  position: sticky;
  top: 0;
  z-index: 1;
}

/* table-layout: fixed + the <colgroup> below give every column an actual
   percentage of the table's width, so each one visibly shrinks together as
   the browser narrows (with table-layout: auto the browser mostly sizes
   columns by content instead, which doesn't shrink predictably). Text wraps
   onto extra lines as its column gets smaller. */
.clsUserTable {
  width: 100%;
  table-layout: fixed;
  border-collapse: collapse;
  font-size: 0.95em;
}

/* The percentage columns add up to 85% (not 100%): Edit + Delete take fixed pixels, so the rest must leave room
   for them or the table grows wider than its blue header and shows an unlabeled strip after Delete. */
.au_colTags       { width: 7%; }
.au_colUserName   { width: 10%; }
/* Matches the Delete column's width — Search/Clear stack vertically in the
   search row (see .clsSearchForm .clsButton.au_clsSearchBtn) so this column
   can stay narrow instead of needing room for two buttons side by side. */
.au_colEdit       { width: 68px; }
.au_colPassword   { width: 7%; }
.au_colEmail      { width: 10%; }
.au_colCreatedAt  { width: 8%; }
.au_colActivatedAt{ width: 8%; }
.au_colLastLogin  { width: 8%; }
.au_colAdminNotes { width: 9%; }
.au_colLocation   { width: 10%; }
.au_colLocUpdated { width: 8%; }
.au_colDelete     { width: 72px; }

.clsUserTable th,
.clsUserTable td {
  padding: 6px 8px;
  text-align: left;
  border-bottom: 1px solid #dee2e6;
  box-sizing: border-box;
  white-space: normal;
  overflow-wrap: break-word;
}

.clsUserTable th {
  background-color: #f8f9fa;
  font-weight: bold;
}

/* Compact, fixed-size columns for the action buttons — these two shouldn't
   grow just because the browser window does. */
/* Column width for Edit/Delete now comes from the <colgroup> (au_colEdit /
   au_colDelete) — this class just keeps their button labels from wrapping. */
.clsActionsCol {
  white-space: nowrap;
}

.clsUserTable .clsActions .clsButton,
.clsUserTable td.clsActionsCol .clsButton {
  width: auto;
  max-width: 100%;
  height: 30px;
  padding: 0 6px;
  font-size: 0.8em;
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.clsAdminYes {
  color: #28a745;
  font-weight: bold;
}

.clsSortLink {
  color: #007bff;
  text-decoration: none;
}

.clsSortLink:hover {
  text-decoration: underline;
}

.clsSortAsc::after {
  content: " ↑";
  color: #28a745;
}

.clsSortDesc::after {
  content: " ↓";
  color: #dc3545;
}

/* Half-screen (600-960px): a bit more compact, but columns still size
   themselves by content instead of fighting fixed pixel widths. */
@media (min-width: 600px) and (max-width: 960px) {
  .clsUserTable th,
  .clsUserTable td {
    padding: 4px 6px;
  }

  .clsUserTable {
    font-size: 0.85em;
  }

  .au_clsSearchInput {
    padding: 3px;
    color: #dc3545;
  }
}

/* Narrow screens (below 600px): every column stays visible — nothing is
   hidden and the table never switches to a stacked-card layout. Columns
   just shrink further and wrap their text onto extra lines; there's no
   min-width forcing a wider table than the screen, so this should rarely
   need horizontal scrolling at all — .clsUserTableWrapper's overflow-x:
   auto is still there as a fallback for extreme cases. */
@media (max-width: 599px) {
  .clsUserTable th,
  .clsUserTable td {
    padding: 4px 6px;
  }

  .clsUserTable {
    font-size: 0.8em;
  }

  .au_clsSearchInput {
    color: #dc3545;
  }

  .au_clsRedText {
    color: #dc3545;
  }
}
/* Admin Edit User: compact header area (see docs/design.md, "Admin pages: compact
   header area") — smaller title and Manage User ... buttons so the form starts higher. */
.au_clsEditTitle {
  font-size: 1.15em;
  margin: 4px 0;
}
.clsButton.au_clsManageBtn {
  height: 28px;
  margin: 2px 4px 2px 0;
  padding: 2px 12px;
  font-size: 0.85em;
}
/* Base styles */
.as_search-page {
  max-width: 100%;
  margin: 0 auto;
  padding: 16px;
  font-family: Arial, sans-serif;
}

.as_clsAdvancedSearchDivSearchContainer {
  display: flex;
  gap: 16px;
  flex-direction: column;
}

.as_clsDivSearchMain {
  flex: 3;
}

.as_clsDivListSavedSearches {
  flex: 1;
}

.as_clsCriterion {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: 12px;
}

.s_clsCriterionIcon {
  display: inline-block;
  margin-right: 4px;
  font-size: 1.2em;
  vertical-align: middle;
}

.s_clsDeleteChip {
  display: inline-block;
  vertical-align: middle;
  margin-left: 0;
  padding: 3px 8px;
  background-color: #6c757d;
  color: white;
  font-size: 0.75em;
  font-weight: bold;
  text-decoration: none;
  border-radius: 999px;
  transition: background 0.15s;
}

.s_clsDeleteChip:visited {
  color: white;
}

.s_clsDeleteChip:hover {
  background-color: #565e64;
  color: white;
}

.s_clsAdminEditAnswerChip {
  display: inline-block;
  vertical-align: middle;
  margin-left: 8px;
  padding: 2px 9px;
  background-color: #fdecea;
  border: 2px solid #c0392b;
  border-radius: 999px;
  color: #c0392b;
  font-size: 0.75em;
  font-weight: bold;
  text-decoration: none;
}

.s_clsAdminEditAnswerChip:hover {
  background-color: #c0392b;
  color: white;
}

.as_clsCboCategoryID,
.as_clsCboAnswer,
.as_clsCboQuestionID,
.as_clsCboPriority {
  padding: 8px;
  border: 1px solid #ccc;
  border-radius: 4px;
  width: 100%;
  max-width: 200px;
  box-sizing: border-box;
}

.as_clsDivLinks {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  margin: 12px 0;
}

.as_clsDivFormActions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: flex-start;
}

.as_clsDivFormActions label {
  font-weight: bold;
}

.as_clsDivFormActions input[type="text"] {
  padding: 8px;
  border: 1px solid #ccc;
  border-radius: 4px;
  width: 100%;
  max-width: 300px;
}



.as_clsUserResult {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 16px;
}

.as_clsUserResult ul {
  list-style-type: disc;
  margin-top: 8px;
  padding-left: 20px;
}

.answer-matched {
  color: green;
}

.answer-unmatched {
  color: red;
}

.answer-unanswered {
  color: #ff8300;
}
.answer-no {
  color: red;
}

hr {
  border: 0;
  border-top: 1px solid #ccc;
  margin: 16px 0;
}

/* Mobile-specific styles */
@media (max-width: 768px) {
  .as_search-page {
    padding: 12px;
  }

  .as_clsAdvancedSearchDivSearchContainer {
    flex-direction: column;
  }

  .as_clsDivSearchMain,
  .as_clsDivListSavedSearches {
    flex: none;
    width: 100%;
  }

  .as_clsCriterion {
    flex-direction: column;
    align-items: stretch;
  }

  .as_clsCboCategoryID,
  .as_clsCboAnswer,
  .as_clsCboQuestionID,
  .as_clsCboPriority {
    max-width: 100%;
  }

  .as_clsDivLinks {
    flex-direction: column;
    align-items: flex-start;
  }

  .as_clsDivFormActions {
    align-items: stretch;
  }

  h1 {
    font-size: 1.5rem;
  }

  h2 {
    font-size: 1.25rem;
  }

  h3 {
    font-size: 1rem;
  }
}

@media (max-width: 480px) {
  .as_search-page {
    padding: 8px;
  }

  h1 {
    font-size: 1.25rem;
  }

  h2 {
    font-size: 1rem;
  }

  h3 {
    font-size: 1rem;
  }

  .as_clsUserResult ul {
    padding-left: 15px;
  }
}

.as_search-page .s_clsCriterion {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
}

.as_search-page .s_clsCboCategoryID,
.as_search-page .s_clsCboAnswer,
.as_search-page .s_clsCboPriority {
  margin-right: 0;
  max-width: 130px;
}

.as_search-page .s_clsDeleteChip {
  margin-left: 0;
}

.as_search-page .s_clsCboQuestionID {
    /* Tightened from 300px so the full row (category/question/answer/priority
       + delete chip) fits on one line at narrower browser widths. */
    max-width: 220px;
}

/* Limit opened dropdown height to ~5-6 items and add scroll */
.s_clsCboQuestionID::-webkit-select-list,
.s_clsCboQuestionID option {
    max-height: 200px; /* Adjust to fit ~5 options (typically 35-40px per option) */
    overflow-y: auto;
}

/* Firefox support */
.s_clsCboQuestionID {
    scrollbar-width: thin;
}
#s_idSearchButton,
#s_idSaveSearchButton {
  height: 48px;
  padding: 12px 22px;
  font-size: 1.05em;
}

/* The main action — orange so it stands out from the blue buttons around it. */
#s_idSearchButton {
  background: linear-gradient(#ffa62b, #f57c00);
  border: 2px solid #e65100;
  color: #fff;
  font-weight: bold;
  font-size: 1.2em;
  height: 52px;
  line-height: 1;
  padding: 0 34px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 3px 8px rgba(230, 81, 0, 0.45);
}
#s_idSearchButton:hover {
  background: linear-gradient(#ffb64d, #ef6c00);
  box-shadow: 0 5px 12px rgba(230, 81, 0, 0.55);
}

.as_current-search-title {
  font-size: 2rem; /* Adjust as needed for "big" */
  font-weight: bold;
  text-align: center;
  margin: 2rem 0 1rem;
  color: #d8cc29; /* Optional: blue to match your theme */
  text-shadow: 1px 1px 2px rgba(0,0,0,0.1); /* Optional subtle shadow for emphasis */
}
@media (max-width: 768px) {
  .clsBlueContainer .as_clsCriterion {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }

  .clsBlueContainer select,
  .clsBlueContainer input[type="text"],
  .clsBlueContainer .clsButton {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    font-size: 15pt;
  }

  .clsBlueContainer .s_clsDivFormActions .clsButton {
    width: 100%;
  }
}
/* Each matching tribe member gets its own blue card. */
.s_clsResultCard {
  margin: 16px 0;
  padding: 14px 20px;
  border: 2px solid #b3d9f5;
  text-align: left;
}

.s_clsConnectRow {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin: 8px 0;
}
.s_clsConnectRow form { margin: 0; }

.s_clsResultBadgeRow { margin: 6px 0 8px; }
.s_clsResultBadgeRow .oc_clsMatchBadge { margin-left: 0; }

/* Add / Quick Pick / Clear share one line when there's room, and wrap when there isn't. */
.s_clsToolRow {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}
.s_clsToolRow > * { margin: 0; }

/* On wide screens let the dropdowns grow so more of the text shows — they still size to their
   longest option, so short ones stay compact. */
@media (min-width: 1200px) {
  .as_search-page .s_clsCboCategoryID { max-width: 200px; }
  .as_search-page .s_clsCboQuestionID { max-width: 420px; }
  .as_search-page .s_clsCboPriority   { max-width: 160px; }
}
@media (min-width: 1600px) {
  .as_search-page .s_clsCboCategoryID { max-width: 240px; }
  .as_search-page .s_clsCboQuestionID { max-width: 560px; }
}

/* The quest's name, in a rounded box with a bold yellow border. */
.s_clsQuestTitleBox {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 6px 16px;
  width: fit-content;
  max-width: 100%;
  margin: 10px auto;
  padding: 8px 22px;
  background: #01579b;
  border: 4px solid #ffd600;
  border-radius: 18px;
}
.s_clsQuestTitleText {
  margin: 0;
  color: #ffd600;
  overflow-wrap: anywhere;
}
.s_clsEditName { color: #fff; font-size: 0.8rem; }
.s_clsEditName summary { cursor: pointer; }
.s_clsEditName input[type="text"] { margin-top: 4px; max-width: 260px; }
.s_clsEditNameButtons { display: flex; gap: 8px; margin-top: 8px; }

/* Rarely-used, kept well away from the Search button. */
.s_clsDangerZone {
  margin-top: 40px;
  padding-top: 14px;
  border-top: 1px solid #b3d9f5;
  text-align: center;
  font-size: 0.9rem;
}

/* Search and Save Search side by side. */
.s_clsSearchSaveRow {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
#s_idSaveSearchButton:disabled {
  background: #b0bec5;
  border-color: #b0bec5;
  color: #eceff1;
  cursor: not-allowed;
  opacity: 0.75;
  box-shadow: none;
}

/* The match line and Connect / Already connected share a row (wrapping on narrow screens). */
.s_clsMatchLine {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 18px;
}
.s_clsMatchLine .s_clsConnectRow { margin: 0; }

/* A smaller Connect button. */
.s_clsMatchLine .s_clsConnectRow .clsButton {
  padding: 4px 12px;
  font-size: 0.85em;
  height: auto;
  min-height: 0;
  line-height: 1.3;
}

.s_clsMinMatchNote {
  margin: -10px 0 12px;
  font-size: 0.75em;
  line-height: 1.3;
  color: #555;
}

/* Per-result summary: how many of the quest's questions match / are unanswered / don't match. */
.s_clsTallyBox {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 28px;
  margin: 10px 0 4px;
  padding: 8px 18px;
  border: 2px solid #b3d9f5;
  width: fit-content;
  max-width: 100%;
}
.s_clsTallyItem { display: flex; align-items: baseline; gap: 6px; }
.s_clsTallyItem strong { font-size: 1.3em; }
.s_clsTallyMatched strong { color: #2e7d32; }
.s_clsTallyUnanswered strong { color: #757575; }
.s_clsTallyUnmatched strong { color: #c62828; }

.s_clsNudge form { margin: 0; }
.s_clsNudge .clsButton { padding: 4px 12px; font-size: 0.85em; height: auto; min-height: 0; line-height: 1.3; }
/* The Nudge button stays on ONE line (it was wrapping into a tall 3-line pill next to the text) and sits ABOVE the
   "They'll get an anonymous note..." explanation instead of beside it. */
.s_clsTallyBox .s_clsNudge { flex: 1 1 100%; flex-direction: column; align-items: flex-start; gap: 6px; }
.s_clsNudge .clsButton { white-space: nowrap; width: auto; max-width: none; }
.s_clsNudged { color: #2e7d32; font-size: 0.95em !important; }

.s_clsNudge button:disabled {
  background: #b0bec5;
  border-color: #b0bec5;
  color: #eceff1;
  cursor: not-allowed;
  opacity: 0.75;
  box-shadow: none;
}
.s_clsNudgedAt { font-size: 0.8em; color: #555; }
/* "Nothing was sent" notices (their inbox is full, etc.) — pale yellow like the site's other warnings. */
.s_clsNudgeWarn { background-color: #fff9c4; color: #4a3b00; padding: 4px 10px; border-radius: 8px; }

/* Let the Question dropdown soak up whatever width is left in the row (rather than relying on
   viewport breakpoints), so more of the question text shows whenever there is room. Below 769px
   the rows stack, so this only applies to the side-by-side layout. */
@media (min-width: 769px) {
  .as_search-page .s_clsCriterion .s_clsCboQuestionID {
    flex: 1 1 260px; /* takes all the spare width, so more of the question shows */
    width: auto;
    min-width: 240px;
    max-width: none;
  }
  /* Yes / No / Skip (and short multiple-choice answers) don't need a wide box —
     fixed compact width instead of stretching to share the spare room. */
  .as_search-page .s_clsCriterion .s_clsCboAnswer {
    flex: 0 0 auto;
    width: 88px;
    min-width: 0;
    max-width: 150px;
  }
}

/* "Back to My Quests" link at the top of the page. */
.s_clsBackToQuests { text-align: left; margin-bottom: 4px; }
.s_clsBackToQuests a { text-decoration: none; display: inline-flex; align-items: center; justify-content: center; line-height: 1; }
.s_clsBackToQuests a:hover { transform: translateX(-3px); transition: transform 0.15s; }


/* "Clear Search Criteria" — a plain text link, not a button. */
.as_search-page a.s_clsClearLink {
  color: #1a5fb4;
  text-decoration: underline;
  font-size: 0.95em;
  white-space: nowrap;
  align-self: center;
}
.as_search-page a.s_clsClearLink:hover { color: #0b2a5b; }

/* ── Phones / narrow screens ────────────────────────────────────────────────
   (The older mobile rules above target .as_clsCriterion, but the live rows use
   .s_clsCriterion, so the dropdowns stayed capped at 130-220px instead of using the
   screen.) Each question row becomes a small card: icon + remove chip on top, then the
   category / question / answer / priority dropdowns stacked full width. */
@media (max-width: 768px) {
  .as_search-page .s_clsCriterion {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: 8px;
    padding: 12px;
    background: #fff;
    border: 1px solid #b3d9f5;
    border-radius: 12px;
  }
  .as_search-page .s_clsCriterion .s_clsCriterionIcon { grid-area: 1 / 1; align-self: center; margin: 0; }
  .as_search-page .s_clsCriterion .s_clsDeleteChip    { grid-area: 1 / 3; align-self: center; justify-self: end; }
  .as_search-page .s_clsCriterion select {
    grid-column: 1 / -1;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    flex: none;
    font-size: 13pt;
    box-sizing: border-box;
  }

  /* Buttons / links under the criteria: one per line, full width. */
  .as_search-page .s_clsToolRow { flex-direction: column; align-items: stretch; }
  .as_search-page .s_clsToolRow .clsButton { width: 100%; box-sizing: border-box; text-align: center; }
  .as_search-page a.s_clsClearLink { text-align: center; padding: 6px 0; }
  .as_search-page .s_clsSearchSaveRow { flex-direction: column; align-items: stretch; }
  .as_search-page #s_idSearchButton,
  .as_search-page #s_idSaveSearchButton { width: 100%; box-sizing: border-box; }

  /* Quest name box and result cards fit the screen. */
  .as_search-page .s_clsQuestTitleBox { width: auto; padding: 8px 14px; }
  .as_search-page .s_clsResultCard { padding: 12px; overflow-wrap: anywhere; }
  .as_search-page .s_clsConnectRow { flex-direction: column; align-items: stretch; }
  .as_search-page .s_clsConnectRow .clsButton,
  .as_search-page .s_clsConnectRow form,
  .as_search-page .s_clsConnectRow button { width: 100%; box-sizing: border-box; }
}


/* Admin: a result person with no answer to a question — the Add link is yellow and gently pulsing. */
.s_clsAdminEditAnswerChip.s_clsNoAnswerChip {
  background: #ffe066; border-color: #f0b400; color: #5f4b00; font-weight: bold;
  animation: s_noanswer_pulse 1.4s ease-in-out infinite;
}
@keyframes s_noanswer_pulse {
  0%, 100% { background: #fff3a8; box-shadow: 0 0 0 0 rgba(240, 180, 0, 0.55); }
  50%      { background: #ffd43b; box-shadow: 0 0 0 7px rgba(240, 180, 0, 0); }
}
@media (prefers-reduced-motion: reduce) { .s_clsAdminEditAnswerChip.s_clsNoAnswerChip { animation: none; } }
/* app/assets/stylesheets/answers.css – FULL & FINAL */

/* Your original styles */
.an_clsEditAnswerContainer {
  text-align: center;
  padding: 20px;
  border-radius: 10px;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.question-text {
  font-size: 1.7em;
  font-weight: bold;
  margin-bottom: 1rem;
  color: #0288d1;
}

select {
  padding: 8px;
  border-radius: 5px;
  border: 1px solid #ccc;
}

/* No background-color override here — .clsBlueContainer's site-wide #e3f2fd
   (application.css) should apply so this matches every other page's
   "blue container" shade instead of its own lighter #f0f8ff. */
.clsEditAnswerContainer.clsBlueContainer {
  padding: 20px;
  border-radius: 5px;
}

.an_clsFormGroup {
  margin-bottom: 15px;
}

.an_clsNewAnswerPage {
  display: flex;
  flex-direction: column;
  align-items: center;
  min-height: 70vh;
  text-align: center;
}

/* NO scrollbar inside the page (user, 10/30: "stop that"). The shared .clsBlueContainer hides sideways overflow (overflow-x: hidden),
   and a browser then gives the box its OWN up/down scrollbar — the corner sparkles poking past the card were enough to trigger it.
   "clip" cuts the sideways spill WITHOUT making a scroll box; older browsers fall back to "visible". The page itself scrolls normally. */
.an_clsNewAnswerPage.clsBlueContainer {
  overflow: visible;
  overflow-x: clip;
}

.an_clsNewAnswerPage-content {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex: 1;
  width: 100%;
}

.an_clsAnswerCardContainer.clsBlueContainer {
  position: relative;
  background-color: #ffffff;
  border: 2px solid var(--an-accent, #29b6f6);
  border-radius: 24px;
  padding-top: 30px;
  padding-bottom: 30px;
  max-width: 700px;
  width: 100%;
  box-sizing: border-box;
  animation: an_glow-pulse 2.5s ease-in-out infinite;
  /* The shared .clsBlueContainer sets overflow-x: hidden with no overflow-y,
     which browsers treat as overflow-y: auto by default when the two axes
     differ — since the corner sparkles (.an_clsSparkle) sit at negative
     offsets bleeding outside this box, that auto behavior both clipped them
     and produced an unwanted internal scrollbar. Overriding to fully visible
     here (higher specificity than the base class, so it always wins). */
  overflow: visible;
}

@keyframes an_glow-pulse {
  0%, 100% { box-shadow: 0 0 10px var(--an-accent, #29b6f6), 0 6px 16px rgba(0, 0, 0, 0.1); }
  50%      { box-shadow: 0 0 26px var(--an-accent, #29b6f6), 0 6px 16px rgba(0, 0, 0, 0.1); }
}

.an_clsAnswerCardContainer .question-text {
  color: var(--an-font, #0288d1);
}

/* Pull the page title and the "Your Answer" label into the same per-question
   theme color as the question text, instead of a black title + always-blue
   label + always-blue button clashing against each other. */
.an_clsNewAnswerPage > h1,
.questions-container > h1 {
  color: var(--an-font, #0288d1);
}

.an_clsAnswerCardContainer label,
.an_clsAnswerCardContainer .category {
  color: var(--an-font, #0288d1);
}

/* Fun color theme, picked per-question so every question gets a different
   sparkly border + font color instead of always the same blue. */
.an_theme-1 { --an-accent: #ff6ec7; --an-font: #d6009c; }
.an_theme-2 { --an-accent: #29b6f6; --an-font: #0288d1; }
.an_theme-3 { --an-accent: #66bb6a; --an-font: #2e7d32; }
.an_theme-4 { --an-accent: #ffa726; --an-font: #e65100; }
.an_theme-5 { --an-accent: #ab47bc; --an-font: #6a1b9a; }

.an_clsSparkle {
  position: absolute;
  font-size: 1.5em;
  pointer-events: none;
  animation: an_twinkle 1.8s ease-in-out infinite;
}

.an_clsSparkle-tl { top: -14px; left: -14px; }
.an_clsSparkle-tr { top: -14px; right: -14px; animation-delay: 0.4s; }
.an_clsSparkle-bl { bottom: -14px; left: -14px; animation-delay: 0.8s; }
.an_clsSparkle-br { bottom: -14px; right: -14px; animation-delay: 1.2s; }

@keyframes an_twinkle {
  0%, 100% { opacity: 0.35; transform: scale(0.8) rotate(0deg); }
  50%      { opacity: 1;    transform: scale(1.25) rotate(20deg); }
}

.an_clsNewAnswerPage .clsActions {
  margin-top: 20px;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;   /* Save Answer + Cancel sit in the middle of the card */
}
.an_clsNewAnswerPage .clsActions .clsButton:disabled { opacity: 0.5; cursor: not-allowed; }

.an_clsYesNoButtons {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 15px;
  margin-top: 10px;
}

.an_clsYesNoButtons form {
  display: inline;
}
/* Buttons that sit directly in the row (the change-answer page's Yes / Maybe / No) share the width like the ones in forms. */
@media (max-width: 699px) {
  .an_clsYesNoButtons > button.clsButton { flex: 1 1 auto; min-width: max-content; }   /* keep the whole emoji + word (10/30) */
}

.skip-form {
  margin-top: 15px;
}

/* NEW: left-aligned match list */
.match-list {
  text-align: left;
  margin: 2rem auto;
  max-width: 600px;
  padding-left: 2rem;
  font-size: 1.1rem;
}

.match-list li {
  margin: 0.8rem 0;
}

/* Hide the shared question */
.shared-question {
  display: none;
}
.clsBlueButton.small {
  font-size: 1rem;
  padding: 4px 8px;
  margin-left: 10px;
}

/* Small plain-text "invite to Camp Fire" action in the match list — deliberately
   NOT a .clsButton (that's a 40px pill, way too big for an inline list item). */
.mu_invite-link {
  display: inline;
  margin-left: 10px;
  background: none;
  border: none;
  padding: 0;
  font-size: 1rem;
  font-family: inherit;
  color: #0a58ca;
  text-decoration: underline;
  cursor: pointer;
}
.mu_invite-link:hover {
  color: #063d8f;
}

/* The action buttons (Update Answer / Cancel / Delete My Answer) at the
   default .clsButton size (height: 40px) look squished with longer labels
   like "Delete My Answer" — give them a bit more room. */
.clsActions .clsButton {
  height: 46px;
  padding: 10px 20px;
  font-size: 1.05em;
}
em { color: #2e7d32; font-weight: 600; }

.match-list + p em {
  color: #1976d2;
  font-weight: 600;
  font-style: normal;
}

/* ===== "More fun" visual pass for the Update Your Answer page only — colors/
   shadows/icons, no data or text removed. Everything below is scoped under
   .an_clsEditPage (only on this page's container) or an_-prefixed classes so
   none of it leaks onto the other pages that share .clsFormGroup /
   .clsEditAnswerContainer (admin's answer pages, daily_question, etc).
   Revert by restoring the pre-pass copies of this file and
   app/views/answers/edit.html.erb (ask Claude — it kept backups). ===== */

.an_clsEditPage.clsBlueContainer {
  box-shadow: 0 4px 14px rgba(2, 136, 209, 0.18);
}

/* One single card holding the question, notes, answer field, and buttons —
   instead of three separate boxed .clsFormGroup panels stacked on top of
   each other. */
.an_clsAnswerCard {
  background: #f5f9fc;
  border-radius: 12px;
  padding: 20px;
  box-shadow: 0 1px 4px rgba(0,0,0,0.08);
}

.an_clsAnswerCard .question-text {
  margin-bottom: 16px;
}

.an_clsAnswerCard-notes {
  margin-bottom: 16px;
  background: #fff;
  border: 1px solid #d8e8f5;
  border-radius: 10px;
  padding: 12px 16px;
}

.an_clsAnswerCard-notes-label {
  margin: 0 0 6px;
  font-size: 0.8em;
  font-weight: bold;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: #5b7a94;
}

.an_clsAnswerCard-notes p {
  margin: 0;
}

.an_clsAnswerCard-field {
  margin-bottom: 16px;
}

.an_clsAnswerCard select,
.an_clsAnswerCard textarea {
  font-size: 1.05em;
  padding: 10px;
  border: 2px solid #90caf9;
  border-radius: 8px;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.an_clsAnswerCard select:focus,
.an_clsAnswerCard textarea:focus {
  outline: none;
  border-color: #0288d1;
  box-shadow: 0 0 0 3px rgba(2, 136, 209, 0.15);
}

/* The two match sections — distinct accent colors so they don't both read
   as the same flat blue-bordered box (same base treatment used for the
   dashboard's Today/Yesterday QOTD cards). */
.an_clsMatchSection {
  border-radius: 12px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}

.an_clsMatchSection-same {
  border: 2px solid #26a69a !important;
  background-color: #e0f2f1;
}

.an_clsMatchSection-top {
  border: 2px solid #f5a623 !important;
  background-color: #fff8ec;
}

.an_clsSectionIcon {
  margin-right: 4px;
}

.an_clsEditPage .match-list li {
  background: rgba(255,255,255,0.6);
  border-radius: 8px;
  padding: 8px 12px;
}


/* ===== "Camp Fire vibe" pass (2026-09-20) — Update Your Answer page only.
   Modeled on the "Your Camp Fire is Lit!" card: dark gradient panel, big
   centered emoji, white text, glowing yellow CTA — but in the house palette
   (dark blue #0b2a5b / #01579b, light blue #90caf9 / #e3f2fd, yellow #ffd43b).
   Readable content (inputs, match lists) stays on light panels.
   Revert: restore answers.css.bak_20260920_081219 and
   app/views/answers/edit.html.erb.bak_20260920_081219. ===== */

.an_clsEditPage .an_clsAnswerCard {
  background: linear-gradient(180deg, #0277bd 0%, #039be5 70%, #4fc3f7 100%);
  color: #fff;
  border-radius: 16px;
  padding: 24px 20px;
  box-shadow: 0 3px 8px rgba(0,0,0,0.3);
  animation: an_ember-glow 3s ease-in-out infinite;
}
@keyframes an_ember-glow {
  0%, 100% { box-shadow: 0 3px 8px rgba(0,0,0,0.3), 0 0 0 rgba(255,212,59,0); }
  50%      { box-shadow: 0 3px 8px rgba(0,0,0,0.3), 0 0 22px rgba(255,212,59,0.45); }
}
@media (prefers-reduced-motion: reduce) {
  .an_clsEditPage .an_clsAnswerCard { animation: none; }
}
.an_clsEditPage .an_clsAnswerCard .question-text,
.an_clsEditPage .an_clsAnswerCard label { color: #fff; }
.an_clsEditPage .an_clsAnswerCard select,
.an_clsEditPage .an_clsAnswerCard textarea {
  background: #fff;
  border-color: #90caf9;
  color: #2b2b2b;
}
.an_clsEditPage .an_clsAnswerCard select:focus,
.an_clsEditPage .an_clsAnswerCard textarea:focus {
  border-color: #ffd43b;
  box-shadow: 0 0 0 3px rgba(255,212,59,0.35);
}

/* Yellow = the main action; light blue = the quiet one; Delete stays red. */
.an_clsBtnYellow.clsBlueButton {
  background: #ffd43b;
  color: #0b2a5b;
  font-weight: bold;
}
.an_clsBtnYellow.clsBlueButton:hover { background: #ffe066; }
/* a.clsButton:visited (application.css) forces white text and out-ranks a
   plain class rule, so the link needs the same element+pseudo specificity. */
.an_clsBtnLight.clsBlueButton,
a.an_clsBtnLight.clsBlueButton,
a.an_clsBtnLight.clsBlueButton:visited {
  background: #e3f2fd;
  color: #01579b;
  font-weight: bold;
}
.an_clsBtnLight.clsBlueButton:hover,
a.an_clsBtnLight.clsBlueButton:hover { background: #90caf9; color: #0b2a5b; }

.an_clsBigIcon { font-size: 40pt; line-height: 1; text-align: center; }

/* Match sections: same dark-blue panel for "same answer", light-blue panel for
   "top matches" — centered, big emoji on top. */
.an_clsEditPage .an_clsMatchSection-same {
  text-align: center;
  color: #fff;
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 70%, #0288d1 100%) !important;
  border: none !important;
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0,0,0,0.3);
  padding: 24px 16px;
}
.an_clsEditPage .an_clsMatchSection-same h2 { color: #fff; margin: 0.25rem 0; }

.an_clsEditPage .an_clsMatchSection-top {
  text-align: center;
  color: #0b2a5b;
  background: linear-gradient(180deg, #e3f2fd 0%, #90caf9 100%) !important;
  border: 3px solid #ffd43b !important;
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(2,136,209,0.25);
  padding: 24px 16px;
}
.an_clsEditPage .an_clsMatchSection-top h2 { color: #0b2a5b; margin: 0.25rem 0; }

.an_clsEditPage .an_clsMatchSection-same em,
.an_clsEditPage .an_clsMatchSection-top em { font-style: normal; }

/* Light reading panel inside the dark sections. */
.an_clsMatchBody {
  background: #fff;
  color: #2b2b2b;
  border-radius: 12px;
  padding: 12px 16px;
  text-align: left;
}
.an_clsEditPage .an_clsMatchBody .match-list { margin: 0 auto; }
.an_clsEditPage .an_clsMatchBody .match-list li { background: #e3f2fd; }

/* Page title lives inside the answer card now. Yellow + letter-spaced + a
   divider so it reads as a heading, distinct from the white question text. */
.an_clsCardTitle {
  font-size: 27pt;
  font-weight: 800;
  color: #ffe066;
  letter-spacing: 0.04em;
  text-shadow: 0 2px 4px rgba(0,0,0,0.3);
  padding-bottom: 12px;
  margin-bottom: 16px;
  border-bottom: 2px solid rgba(255,224,102,0.55);
}
.an_clsCardTitle-icon { font-size: 32pt; vertical-align: middle; margin-right: 8px; }

/* "Today!" event-date label — draws the eye when the event is happening today. */
.an_today-pulse {
  display: inline-block;
  color: #c0392b;
  animation: an_today-pulse 1.4s ease-in-out infinite;
}
@keyframes an_today-pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: 0.6; transform: scale(1.08); }
}
@media (prefers-reduced-motion: reduce) {
  .an_today-pulse { animation: none; }
}

/* Update Answer / Cancel / Delete My Answer: three buttons side by side (each
   .clsButton has its own margin/padding, no explicit width) run wider than a
   phone screen and were spilling past the card's edge instead of wrapping.
   Stack them full-width instead, same pattern as other pages' mobile button
   stacks (e.g. dashboard.css's .db_dash-actions). */
@media (max-width: 600px) {
  .an_clsEditPage .clsActions {
    display: flex;
    flex-direction: column;
  }
  .an_clsEditPage .clsActions .clsButton {
    width: 100%;
    margin: 6px 0;
  }
}

/* Phones: the "Answer a Question" page still read too big after the site-wide phone scale-down — a tad smaller again.
   (Stacks with .container's 0.87: ≈ 0.80 overall. To revert, delete this block.) */
@media (max-width: 699px) {
  .an_clsNewAnswerPage > * { zoom: 0.92; }   /* on the children, not the wrapper: zoom on the wrapper also shrinks its own margins (design.md) */
}

/* "Answer a Question": trim the dead space above the page title (container top margin + the h1's default top margin). */
.an_clsNewAnswerPage { margin-top: 6px; padding-top: 0; }
.an_clsNewAnswerPage > h1 { margin: 4px 0 8px; }

/* Phones: the "Answer a Question ❓" title (and its emoji) was too big — the emoji follows the title's size. */
@media (max-width: 699px) {
  .an_clsNewAnswerPage > h1 { font-size: 1.25em; }
  .an_clsNewAnswerPage > h1 span.clsEmoji { font-size: 1em; }
}

/* Phones, "Answer a Question": the question itself a tad smaller so more fits on the screen. */
@media (max-width: 699px) {
  .an_clsNewAnswerPage .question-text { font-size: 1.3em; }
}

/* GPS coordinates on the answer pages: one tap selects the whole "lat, lng"; the Copy button copies it. */
.an_gps_text { font-family: monospace; font-weight: bold; font-size: 0.9em; text-decoration: underline; }
.an_gps_copy { margin-left: 6px; padding: 1px 10px; font-size: 0.85em; font-weight: bold; border-radius: 10px;
               border: 1px solid #0288d1; background: #e3f2fd; color: #01579b; cursor: pointer; }

/* Phones: the answer buttons share the row, but each keeps its whole emoji + word; when they don't all fit (Yes / Maybe / No / Skip),
   the extra one goes onto a second line instead of being squeezed (user, 10/30). */
@media (max-width: 699px) {
  .an_clsYesNoButtons { flex-wrap: wrap; gap: 6px; }
  .an_clsYesNoButtons form { flex: 1 1 auto; min-width: max-content; display: block; }
  .an_clsYesNoButtons > .clsButton { flex: 1 1 auto; min-width: max-content; }
  .an_clsYesNoButtons .clsButton { width: 100%; padding-left: 10px; padding-right: 10px; white-space: nowrap; font-size: 0.95em; margin: 0; }
}

/* "Answer a Question": a bit less space above and below the page title. */
.an_clsNewAnswerPage > h1 { margin: 1px 0 2px; line-height: 1.2; }
.an_clsNewAnswerPage > .an_clsNewAnswerPage-content > .an_clsAnswerCardContainer { margin-top: 6px; }

/* ===== Phones: "Update Your Answer" scaled down to match the "Answer a Question" page (it was far too big). ===== */
@media (max-width: 699px) {
  .an_clsEditPage > * { zoom: 0.92; }
  .an_clsEditPage .an_clsCardTitle { font-size: 16pt; padding-bottom: 6px; letter-spacing: 0.02em; }
  .an_clsEditPage .an_clsCardTitle-icon { font-size: 18pt; margin-right: 4px; }
  .an_clsEditPage .an_clsAnswerCard { padding: 14px 12px; }
  .an_clsEditPage .an_clsAnswerCard .question-text { font-size: 1.3em; margin-bottom: 10px; }
  .an_clsEditPage .an_clsAnswerCard-notes { margin-bottom: 10px; }
  /* the Camp Fire / "same answer" / "top matches" panels below the card */
  .an_clsEditPage .an_clsBigIcon { font-size: 26pt; }
  .an_clsEditPage .an_clsMatchSection { padding-left: 12px; padding-right: 12px; margin-top: 1.2rem !important; }
  .an_clsEditPage .an_clsMatchSection h2 { font-size: 15pt; }
  .an_clsEditPage .an_clsMatchSection p { font-size: 12pt !important; }
  .an_clsEditPage .an_clsMatchSection div[style*="48pt"] { font-size: 30pt !important; }
  .an_clsEditPage .an_clsMatchSection .clsButton { font-size: 12pt !important; min-height: 40px !important; }
  .an_clsEditPage .match-list li { font-size: 0.9em; }
}

/* ===== Page margins per docs/design.md "Layout" (web, phones): 10px left/right, 10px under the menu bar, 8px of blue at the
   bottom, 8px to the footer. These two pages' own rules (padding: 20px, margin: 0 auto, margin-top: 6px, padding-top: 0, and
   the 0.92 zoom that also shrank the wrapper's margins) were overriding the site-wide values. ===== */
@media (max-width: 800px) {
  .clsEditAnswerContainer.clsBlueContainer.an_clsEditPage,
  .clsBlueContainer.an_clsNewAnswerPage {
    margin: 10px 10px 8px 10px;
    padding: 5px 10px 8px 10px;
  }
}

/* "Show / Hide Matches": keep the toggle button (and the list it opens) inside the blue panel. The global button hover
   grows it 5% (transform: scale(1.05)), which on a phone sticks after a tap and pushes it past the panel edge. */
.an_clsEditPage .an_clsMatchSection { box-sizing: border-box; max-width: 100%; overflow: hidden; }
#matchedUsersToggle { box-sizing: border-box; max-width: 100%; white-space: normal; transform: none !important; }
.an_clsEditPage .an_clsMatchBody { box-sizing: border-box; max-width: 100%; overflow-x: auto; }

/* "Answer a Question" page: only a small space (8px, docs/design.md) between the blue container and the footer. The page used to be
   at least 70vh tall with its card centred, the card had a 20px bottom margin of its own, and the content area stretched to fill the
   screen, so a short page left a big white gap above the footer. TO REVERT: delete this block. */
.an_clsNewAnswerPage { min-height: 0; }
.an_clsNewAnswerPage > .an_clsNewAnswerPage-content { flex: 0 0 auto; }
.an_clsNewAnswerPage > .an_clsNewAnswerPage-content > .an_clsAnswerCardContainer { margin-bottom: 0; }
.container:has(.an_clsNewAnswerPage) { flex: 0 0 auto; }
.container:has(.an_clsNewAnswerPage) + .f_site-footer { margin-top: 8px; }

/* Phones (user, 10/30: "no one is really reading them, they just want to click"): the GPS line (coordinates + Copy) stays on ONE line,
   and links take less room — a smaller font so a normal one (e.g. https://www.vanfestusa.com/) fits on one line; a really long one
   still wraps instead of running off the screen. */
@media (max-width: 699px) {
  .an_gps_line { white-space: nowrap; font-size: 0.9em; }
  .an_gps_line .an_gps_text { font-size: 0.8em; }
  .an_gps_line .an_gps_copy { font-size: 0.8em; padding: 1px 8px; margin-left: 4px; }
  .an_notes_link { font-size: 0.82em; overflow-wrap: anywhere; word-break: normal; }
}
.beta-container {

  margin: 20px auto;
  background: #f9f9f9;
  padding: 20px;
  border-radius: 10px;
  font-size: 20px; /* Increased base font size */
}

/* Become a Beta Tester Heading */
h1 {
  text-align: center;
  font-size: 50px; /* Larger heading */
}

.beta-duties {
  list-style: none;
  padding: 0;
}

.beta-duties li {
  margin: 10px 0;
  font-size: 20px; /* Larger list items */
}

.question {
  text-align: center;
  margin: 28px 0;
}


#submit-btn {
  background: #FFC107; /* Vibrant yellow for 'heck yeah!' */
}

#submit-btn:hover {
  background: #FFB300; /* Slightly darker yellow on hover */
}

button:hover {
  background: #009ACD;
}


.hidden {
  display: none;
}

.form-group {
  margin: 15px 0;
}

input {
  padding: 10px; /* Slightly larger padding for inputs */
  border: 1px solid #ddd;
  border-radius: 4px;
 
}
/* .clsButton's base height:40px fights the browser's own vertical-align on
   <input type="submit">/<button> text, the same issue fixed on Update
   Settings/Update User elsewhere on the site — height:auto + line-height
   lets padding alone center the label top-to-bottom instead. Applies to
   every button on this page, small or full-size. */
.checkin-page .clsButton {
  height: auto;
  line-height: normal;
}

/* No site-wide green button class exists (application.css only has
   app_clsRedButton) — success green from docs/design.md's palette table. */
.checkin-btn-green {
  background-color: #1a7f37;
}

.checkin-btn-green:hover {
  background-color: #14602a;
}

.checkin-page {
  /* Was a fixed 700px, so it stayed narrow no matter how wide the browser
     was. Now it grows with the viewport, capped so it doesn't stretch too
     far on an ultra-wide monitor. */
  width: 100%;
  max-width: 1400px;
  margin: 0 auto;
  padding: 20px;
  box-sizing: border-box;
}

.checkin-main-layout {
  display: flex;
  gap: 24px;
  align-items: flex-start;
  flex-wrap: wrap;
}

.checkin-main-column {
  flex: 1 1 420px;
  min-width: 0;
}

.checkin-sidebar-column {
  flex: 1 1 380px;
  min-width: 0;
}

/* "Favorite style" hero treatment from docs/design.md ("Your Camp Fire is Lit!")
   — dark gradient panel, big centered emoji, white copy — reached for here
   instead of the flat boxed-panel look, since a plain heading + italic gray
   tagline on top of the page's own light-blue background read as drab. */
.checkin-hero {
  background: linear-gradient(180deg, #0b2a5b, #0288d1);
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
  text-align: center;
  color: #fff;
  padding: 28px 20px;
  margin-bottom: 20px;
}

.checkin-hero-emoji {
  font-size: 44pt;
  line-height: 1;
  margin-bottom: 6px;
}

.checkin-hero h1 {
  margin: 0 0 8px;
  color: #fff;
}

.checkin-hero-tagline {
  margin: 0;
  color: #e3f2fd;
  font-style: italic;
}

/* The page's one primary action — "One glowing yellow CTA" per docs/design.md's
   favorite-style rules, standing out against the blue cards/buttons everywhere
   else on the page instead of blending in as just another blue button. */
.checkin-cta-glow {
  background: #ffd43b !important;
  color: #4d3800 !important;
  border-radius: 25px !important;
  font-weight: bold;
  box-shadow: 0 0 12px rgba(255, 212, 59, 0.6);
  transition: transform 0.2s ease, background 0.2s ease;
}

.checkin-cta-glow:hover {
  background: #ffe066 !important;
  transform: scale(1.05);
}

/* Was flat solid white — every card on the page read as the same plain box
   sitting on top of .clsBlueContainer's own gradient, which felt flat/dated.
   The "Card / panel (on gradient)" color from docs/design.md's palette table
   (#e9edf2) is an actual light blue, not a near-white gradient, so it reads
   as a real distinct panel rather than "still basically white." Content/
   wording inside is untouched, this is purely the container's own look. */
.checkin-card {
  background: #e9edf2;
  border: 1px solid rgba(2, 136, 209, 0.18);
  border-radius: 14px;
  padding: 18px 22px;
  margin-bottom: 20px;
  box-shadow: 0 3px 10px rgba(2, 136, 209, 0.1);
}

.checkin-card h2 {
  margin-top: 0;
}

.checkin-pending-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 0;
  border-bottom: 1px solid #eef5fb;
}

.checkin-pending-row:last-child {
  border-bottom: none;
}

.checkin-deadline {
  color: #4a6d8c;
  font-size: 0.85em;
  margin-left: 8px;
}

.checkin-confirm-btn {
  flex-shrink: 0;
}

.checkin-history-list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.checkin-history-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 2px 0;
  border-bottom: 1px solid #eef5fb;
}

/* Recent Check-In Locations: tighter rows — the small buttons were setting the row height. */
.checkin-history-row .checkin-small-btn {
  min-height: 0;
  height: auto;
  padding: 2px 10px;
  margin: 0 0 0 4px;
  line-height: 1.2;
}

.checkin-history-row:last-child {
  border-bottom: none;
}

.checkin-history-time {
  color: #4a6d8c;
  font-size: 0.85em;
  margin-left: 8px;
}

.checkin-history-nolocation {
  color: #6b87a6;
  font-size: 0.85em;
  font-style: italic;
}

.checkin-status {
  font-weight: bold;
  padding: 8px 12px;
  border-radius: 6px;
  margin-bottom: 14px;
  display: inline-block;
}

.checkin-status--active {
  background: #d4edda;
  color: #1a5c2a;
}

.checkin-status--paused {
  background: #fff3cd;
  color: #856404;
}

.checkin-status--unsaved {
  background: #eef5fb;
  color: #555;
  font-weight: normal;
}

.checkin-field {
  margin-bottom: 12px;
}

.checkin-field label {
  display: block;
  margin-bottom: 4px;
}

.checkin-inline-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-right: 16px;
}

.checkin-quota {
  font-size: 0.7em;
  color: #5f80a0;
  font-weight: normal;
}

.checkin-upsell {
  color: #4a6d8c;
}

.checkin-hint {
  font-size: 0.85em;
  color: #56789a;
}

.checkin-contacts-list {
  list-style: none;
  padding: 0;
  margin: 0 0 16px;
}

.checkin-contact-row {
  border-bottom: 1px solid #eef5fb;
  padding: 8px 0;
}

.checkin-contact-row:last-child {
  border-bottom: none;
}

.checkin-contact-view {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
}

.checkin-contact-info {
  display: flex;
  flex-direction: column;
}

.checkin-contact-email {
  font-size: 0.8em;
  color: #56789a;
}

.checkin-contact-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  max-width: 100%;
}

/* clsRoundButton flex-centers text top-to-bottom already; this just makes
   these particular buttons smaller so a row of them fits without crowding. */
.checkin-small-btn {
  height: auto;
  padding: 6px 14px;
  font-size: 0.85em;
}

/* Was the same near-white as .checkin-card's own background with no border,
   so it read as plain text sitting on the card rather than a button. A
   visible border + a background one shade darker than the card gives it an
   actual button outline to click. */
.checkin-cancel-btn {
  background: #dde3ea;
  color: #444;
  border: 1px solid #b7c2ce !important;
}

.checkin-cancel-btn:hover {
  background: #cdd6e0;
}

.checkin-contact-edit-form {
  display: flex;
  align-items: flex-end;
  gap: 10px;
  flex-wrap: wrap;
  margin-top: 10px;
}

.checkin-contact-edit-form .checkin-field {
  margin-bottom: 0;
}

.checkin-note {
  text-align: center;
  color: #5f80a0;
  font-size: 0.85em;
}

/* Active/Inactive switch for the daily check-in schedule — a real sliding
   toggle instead of a button, so on/off reads at a glance. */
.checkin-toggle {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  font-weight: normal;
}

.checkin-toggle input {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.checkin-toggle-slider {
  position: relative;
  display: inline-block;
  width: 44px;
  height: 24px;
  background: #ccc;
  border-radius: 24px;
  transition: background 0.2s ease;
  flex-shrink: 0;
}

.checkin-toggle-slider::before {
  content: "";
  position: absolute;
  left: 3px;
  top: 3px;
  width: 18px;
  height: 18px;
  background: #fff;
  border-radius: 50%;
  transition: transform 0.2s ease;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}

.checkin-toggle input:checked + .checkin-toggle-slider {
  background: #2e7d32;
}

.checkin-toggle input:checked + .checkin-toggle-slider::before {
  transform: translateX(20px);
}

.checkin-toggle-label {
  font-size: 0.95em;
  color: #333;
}

/* "Turn off Smoke Signal" is a quiet text link (the "Set up" state stays a green button). */
.checkin-turnoff-link {
  background: none;
  border: none;
  padding: 0;
  color: #c0392b;
  text-decoration: underline;
  cursor: pointer;
  font: inherit;
}
.checkin-turnoff-link:hover {
  color: #922b21;
}

/* Last Check-In card: green once checked in today, yellow until then. */
.checkin-card--done {
  background: #d4edda;
  border-color: #28a745;
}
.checkin-card--waiting {
  background: #fff3cd;
  border-color: #e0a800;
}
.checkin-card--done .checkin-status--plain,
.checkin-card--waiting .checkin-status--plain {
  background: transparent;
  padding-left: 0;
  font-weight: bold;
}
.checkin-card--done .checkin-status--plain { color: #1a5c2a; }
.checkin-card--waiting .checkin-status--plain { color: #856404; }

/* Last Check-In card — big icon + headline, gradient background, gentle bounce. */
.checkin-last {
  display: flex;
  align-items: center;
  gap: 18px;
}
.checkin-last-icon {
  font-size: 56px;
  line-height: 1;
  animation: checkin-last-bounce 2.4s ease-in-out infinite;
}
.checkin-last-label {
  text-transform: uppercase;
  letter-spacing: 1.5px;
  font-size: 13px;
  font-weight: bold;
  opacity: 0.7;
}
.checkin-last-headline {
  font-size: 26px;
  font-weight: bold;
  margin: 2px 0 4px;
}
.checkin-last-detail { font-size: 17px; }
.checkin-last.checkin-card--done {
  background: linear-gradient(135deg, #d4edda 0%, #a8e6b8 100%);
  color: #14532d;
  box-shadow: 0 4px 16px rgba(40, 167, 69, 0.35);
}
.checkin-last.checkin-card--waiting {
  background: linear-gradient(135deg, #fff3cd 0%, #ffe08a 100%);
  color: #7a5b00;
  box-shadow: 0 4px 16px rgba(224, 168, 0, 0.35);
}
@keyframes checkin-last-bounce {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-6px) rotate(-6deg); }
}
@media (prefers-reduced-motion: reduce) {
  .checkin-last-icon { animation: none; }
}

/* Less empty space above the footer (2026-10-07): was last card 20px + container padding 20px + container margin 20px
   in blue/white, plus the footer's own 40px top margin. TO REVERT: delete this block. */
.checkin-page.clsBlueContainer { margin-top: 10px; margin-bottom: 8px; padding: 10px 10px 8px; }
.checkin-page > section:last-of-type { margin-bottom: 0; }
.container:has(.checkin-page) + .f_site-footer { margin-top: 8px; }
/* Same 8px when there are no recent check-ins and the two-column layout is the last thing on the page. */
.checkin-page > .checkin-main-layout:last-child > * > section:last-of-type { margin-bottom: 0; }
/* The Background Location Tracking card sits inside #checkinLocationWrap, so it wasn't matched above —
   without this it kept its own 20px bottom margin when there's no check-in history below it. */
.checkin-page > #checkinLocationWrap:last-child > section:last-of-type { margin-bottom: 0; }

/* Phones: the Contacts card goes above Daily Check-In (it is the second column, so it would otherwise stack below). */
@media (max-width: 699px) {
  .checkin-sidebar-column { order: -1; display: flex; flex-direction: column; }
  /* "Share where I am" sits below Contacts on a phone (on a computer it stays above them). */
  #checkinShareCard { order: 2; }
}
/* app/assets/stylesheets/contact.css */
.contact-container {
  max-width: 800px;
  margin: 60px auto;
  padding: 40px;
  background: linear-gradient(135deg, #007bff, #00ddeb);
  border-radius: 12px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  text-align: center;
}

.contact-container h1 {
  font-size: 36px;
  color: #fff;
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
  margin-bottom: 20px;
}

.contact-container p {
  font-size: 15pt;
  color: #f0f8ff;
  margin-bottom: 20px;
}

.field {
  margin-bottom: 20px;
}

.field label {
  display: block;
  font-size: 15pt;
  color: #fff;
  margin-bottom: 5px;
}

.field input[type="text"],
.field input[type="email"],
.field textarea {
  width: 100%;
  padding: 10px;
  font-size: 15pt;
  border: 1px solid #fff;
  border-radius: 8px;
  box-sizing: border-box;
}

.field input[type="text"]::placeholder,
.field input[type="email"]::placeholder,
.field textarea::placeholder {
  color: #aaaaaa;
}

.field input[type="text"]:focus,
.field input[type="email"]:focus,
.field textarea:focus {
  outline: none;
  border-color: #ffeb3b;
  box-shadow: 0 0 5px rgba(255, 235, 59, 0.3);
}

.clsBlueButton {
  background-color: #ff6f61;
  color: white;
  padding: 12px 24px;
  border: none;
  border-radius: 8px;
  font-size: 15pt;
  cursor: pointer;
  transition: background-color 0.3s;
}

.clsBlueButton:hover {
  background-color: #e55a4e;
}

.clsCancelButton {
  background-color: #6c757d;
}

.clsCancelButton:hover {
  background-color: #5a6268;
}

.clsFlash.notice {
  background-color: #d4edda;
  color: #28a745;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

.clsFlash.alert {
  background-color: #f8d7da;
  color: #dc3545;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

.c_clsGreyedOutField {
  background-color: #f0f0f0;
  color: #666666;
  cursor: not-allowed;
}
/* app/assets/stylesheets/conversations.css — matched-user question exchange
   thread (app/views/conversations/show.html.erb). */
.cv_clsThreadPage h1 {
  margin: 0 0 4px;
}

.cv_clsHeaderRow {
  display: flex;
  justify-content: flex-start;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 4px 20px;
}

.cv_clsBackLink {
  white-space: nowrap;
}

.cv_clsSearchName {
  color: #f0f8ff;
  font-size: 0.9em;
  margin-top: -8px;
}

/* Chat-style bubbles, matching open_conversations.css (.oc_clsMessages). */
.cv_clsExchanges {
  background: #fff;
  border-radius: 10px;
  padding: 12px;
  margin: 12px 0;
  /* No scroll box inside the page: the messages simply make the page longer (was max-height: 60vh + overflow-y: auto). */
}

.cv_clsEmpty {
  color: #666;
  text-align: center;
  padding: 20px 0;
}

.cv_clsMessage {
  max-width: 75%;
  margin: 6px 0;
  padding: 8px 12px;
  border-radius: 12px;
  background: #eef0f2;
  color: #222;
  text-align: left;
}

.cv_clsMine {
  margin-left: auto;
  background: #0a58ca;
  color: #fff;
}

.cv_clsMine a {
  color: #cfe2ff;
}

.cv_clsSender {
  margin: 0 0 2px;
  font-size: 0.75em;
  font-weight: bold;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  opacity: 0.7;
}

.cv_clsBody {
  margin: 0;
  white-space: pre-wrap;
  word-break: break-word;
}

.cv_clsMeta {
  margin: 4px 0 0;
  font-size: 0.75em;
  opacity: 0.75;
}

/* Status bubbles (waiting / declined / your turn) are muted, italic. */
.cv_clsStatus .cv_clsBody {
  font-style: italic;
}

.cv_clsDeclined.cv_clsTheirs {
  color: #721c24;
}

.cv_clsWaitingForMe {
  font-weight: bold;
}

.cv_clsPending.cv_clsTheirs {
  color: #856404;
}

.cv_clsWaitingStatus {
  color: #f0f8ff;
  text-align: center;
  font-style: italic;
}

.cv_clsAskSection {
  margin-top: 16px;
  text-align: center;
}

.cv_clsSuggestedList {
  list-style: none;
  padding: 0;
  margin-top: 12px;
}

.cv_clsSuggestedList li {
  background: #fff;
  color: #222;
  border-radius: 8px;
  padding: 10px 14px;
  margin: 6px 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  text-align: left;
}

/* The shared .clsBlueContainer's overflow-x: hidden quietly turns into a scroll box too; clip the sides without making one. */
.cv_clsThreadPage.clsBlueContainer { overflow-x: clip; overflow-y: visible; }

/* "Ask Them Something": the heading and button are centered, left to right. */
.cv_clsAskSection { display: flex; flex-direction: column; align-items: center; text-align: center; }
.cv_clsAskSection .clsButton { margin: 10px auto; }
.cv_clsAskSection #cvSuggestedQuestions { width: 100%; }

/* Conversation page on a phone: smaller titles ("Conversation with …" and "Ask Them Something"). TO REVERT: delete this block. */
@media (max-width: 800px) {
  .cv_clsThreadPage .cv_clsHeaderRow h1 { font-size: 1.2em; line-height: 1.25; }
  .cv_clsThreadPage .cv_clsAskSection h2 { font-size: 1.05em; margin: 6px 0; }
}

/* Small, centered page name so a member can say which page they mean. */
.cv_pageName { text-align: center; margin: 0 0 2px; font-size: 0.8em; font-weight: bold; letter-spacing: 0.04em; text-transform: uppercase; color: #607d8b; }

/* Conversation bubbles use more of their room: less padding inside the white message area and inside each bubble, and bubbles a bit
   wider — so the other person's name and question, and mine, start further to the left. TO REVERT: delete this block. */
.cv_clsExchanges { padding: 8px 6px; }
.cv_clsMessage { max-width: 88%; padding: 8px 8px; }

/* "← Back to Notifications" on its own line above the page name. */
.cv_backRow { margin: 0 0 6px; }

/* Bubbles are no wider than ~60% of the area (and shrink to fit short text): the other person's sit on the LEFT, "You" on the RIGHT
   half of the screen — overriding the 88% from the block above. TO REVERT: delete this block. */
.cv_clsMessage { width: fit-content; max-width: 60%; }
.cv_clsMine { margin-left: auto; }

/* "What now?" guidance card at the bottom of the question conversation (the old status line was near-white text on the light blue box,
   so it was invisible). TO REVERT: delete this block. */
.cv_guidance {
  margin: 12px 0 0; padding: 10px 14px; background: #fff; color: #14213d; font-weight: bold; line-height: 1.4;
  border: 1px solid #b7dcf5; border-left: 6px solid #0288d1; border-radius: 10px; text-align: left;
}

/* Question ideas / search results on the conversation page: the question, then Reroll + Send beside it (below it on a narrow screen). */
.cv_clsSuggestedList li { flex-wrap: wrap; gap: 8px 12px; text-align: left; }
.cv_clsSuggestedList .cv_q_text { flex: 1 1 14rem; min-width: 0; }
.cv_clsSuggestedList .cv_q_actions { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
.cv_clsSuggestedList .cv_q_actions .clsButton { margin: 0; }
@media (max-width: 600px) { .cv_clsSuggestedList .cv_q_actions { width: 100%; justify-content: center; } }
.dq_clsContainer {
  max-width: min(760px, 92vw); /* uses more of the screen on wide browsers */
  margin: 10px auto;
  padding: 20px;
  display: flex;
  flex-direction: column;
  align-items: center; /* Centers all content horizontally */
  justify-content: center; /* Centers content vertically if needed */
}
.dq_clsTitle {
  font-size: 24px;
  color: #0288d1;
  margin-bottom: 10px; /* Reduced margin to move header higher */
}
.dq_clsQuestionBox {
  width: 100%; /* Ensures box spans container width */
  max-width: 100%; /* Prevents overflow */
  text-align: center; /* Centers text and inline elements */
  border-radius: 14px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.18);
  padding: 24px 20px;
}

.dq_clsQuestionText {
  font-size: 26px; /* Increased font size */
  font-weight: bold;
  margin-bottom: 15px;
}
.dq_clsForm {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.dq_clsInput {
  width: 100%;
  max-width: 300px; /* Limits dropdown width */
  min-height: 40px; /* Reduced height for dropdown, not textarea */
  padding: 10px;
  font-size: 15pt;
  border: 1px solid #ccc;
  border-radius: 10px;
  resize: vertical;
}

.dq_clsYesNoButtons {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 20px;
  margin: 10px 0;
}

.dq_clsFormGroup {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
}

.dq_clsActions {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 20px;
  margin-top: 10px;
}

.dq_clsButton {
  background: #007bff;
  color: white;
  padding: 12px 28px;
  border: none;
  border-radius: 25px;
  font-size: 15pt;
  cursor: pointer;
  transition: transform 0.2s, background 0.2s;
}

.dq_clsSubmit {
  width: auto;
  min-width: 220px; /* wide enough that the whole label ("Submit Answer", "Update Answer") fits on one line */
  white-space: nowrap;
  margin: 0 auto; /* Centers button */
}

.dq_clsButton:hover {
  background: #0056b3;
  transform: scale(1.05);
}

.dq_clsButtonActive {
  background: #ffe066; /* house "highlight" yellow, see docs/design.md */
  color: #4d3800;
  font-weight: bold;
  box-shadow: inset 0 0 0 3px #d4a017;
}

.dq_clsButtonActive:hover {
  background: #ffd633;
  color: #4d3800;
}

.dq_clsButtonInactive {
  background: #dfe3e8;
  color: #8a9099;
}

.dq_clsButtonInactive:hover {
  background: #cdd2d9;
  color: #6c757d;
  transform: none;
}

.dq_clsExistingAnswer {
  display: flex;
  align-items: center;
  gap: 10px;
  text-align: left;
  background: #dcefe0;
  color: #1a7f37;
  border: 1px solid #1a7f37;
  border-radius: 10px;
  padding: 12px 16px;
  margin: 0 0 16px;
  font-size: 0.95em;
}

.dq_clsExistingAnswerCheck {
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: #1a7f37;
  color: white;
  font-weight: bold;
  display: flex;
  align-items: center;
  justify-content: center;
}

.dq_clsExistingAnswerValue {
  font-size: 1.3em;
}

.dq_clsExistingAnswerHint {
  color: #3f7a52;
  font-size: 0.9em;
}

.dq_clsSaveNotice {
  display: flex;
  align-items: center;
  gap: 10px;
  text-align: left;
  background: #fff8e1;
  color: #5f4b00;
  border: 1px solid #e6c268;
  border-radius: 10px;
  padding: 12px 16px;
  margin: 0 0 16px;
  font-size: 0.95em;
}

.dq_clsSaveNoticeIcon {
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: #e6c268;
  color: #5f4b00;
  font-weight: bold;
  display: flex;
  align-items: center;
  justify-content: center;
}

.dq_clsSaveNoticeHint {
  color: #7a6420;
  font-size: 0.9em;
}

.dq_clsViewResults {
  background: #1a7f37;
  width: 100%;
  max-width: 320px;
  padding: 16px 28px;
  font-size: 17pt;
  font-weight: bold;
}

.dq_clsViewResults:hover {
  background: #145c29;
}

.dq_clsSignUp {
  background: #6c757d;
}

.dq_clsSignUp:hover {
  background: #5a6268;
}

.dq_clsError {
  color: #dc3545;
  font-size: 15pt;
}

.dq_clsBreakdownTable {
  width: 100%;
  border-collapse: collapse;
  margin: 16px 0;
  text-align: center;
}

.dq_clsBreakdownTable thead th {
  padding: 8px;
  font-size: 0.9em;
  color: #555;
  border-bottom: 2px solid #0288d1;
}

.dq_clsBreakdownTable tbody th {
  padding: 10px 8px;
  text-align: left;
  font-weight: bold;
  color: #333;
  border-top: 1px solid #d8dee5;
  white-space: nowrap;
}

.dq_clsBreakdownTable tbody td {
  padding: 10px 8px;
  border-top: 1px solid #d8dee5;
  color: #333;
}

.dq_clsBreakdownTotalCol {
  font-weight: bold;
  color: #0288d1;
}

.dq_clsMeter {
  height: 6px;
  border-radius: 3px;
  background: #e9edf1;
  overflow: hidden;
  margin: 0 auto 4px;
}

.dq_clsMeterFill {
  height: 100%;
  background: #0288d1;
  border-radius: 3px;
}

.dq_clsMeterFillWinner {
  background: #1a7f37;
}

.dq_clsBreakdownWinnerRow th {
  color: #1a7f37;
}

.dq_clsBreakdownWinnerCell {
  color: #1a7f37 !important;
}

.dq_clsRoomPromo {
  background: #f5f5f5;
  border-radius: 12px;
  padding: 16px;
  margin: 16px 0;
  text-align: center;
}

.dq_clsRoomPromoText {
  margin: 0 0 10px;
  color: #333;
}

.dq_clsRoomButton {
  background: #0288d1; /* brand blue, see docs/design.md palette */
}

.dq_clsRoomButton:hover {
  background: #026ba3;
}

.dq_clsRoomPeek {
  background: #5aa9d6;
}

.dq_clsRoomPeek:hover {
  background: #0288d1;
}

.dq_clsRoomPromoHint {
  margin: 10px 0 0;
  font-size: 0.85em;
  color: #777;
}

/* Red border/tint = "admin-only" everywhere on the site (this panel is
   always admin-gated, so it always gets the treatment). */
.dq_clsAdminDebug {
  max-width: 600px;
  margin: 20px auto 0;
  padding: 8px 12px;
  font-size: 0.85em;
  color: #555;
  background: #fdecea;
  border: 1px dashed #e57373;
  border-radius: 8px;
}

.dq_clsAdminDebug summary {
  cursor: pointer;
  font-weight: bold;
  color: #6c757d;
}

.dq_clsAdminDebug div {
  margin-top: 6px;
  font-family: monospace;
}
/* "Save your answer" email box on the guest confirmation page */
.dq_clsSaveEmailForm { display: flex; flex-direction: column; gap: 8px; margin: 12px 0; position: relative; }


/* ---- Shared-question page (/q/…) and the logged-out daily question page: playful look + "what is NomadConnections" promo ---- */
.sq_hero {
  width: auto;
  align-self: stretch;
  margin-left: 18px;   /* white space to the left and right of the top banner */
  margin-right: 18px;
  text-align: center;
  color: #fff;
  background: linear-gradient(135deg, #0288d1, #7b4fd6 60%, #e8478b);
  border-radius: 18px;
  padding: 22px 16px 18px;
  margin-bottom: 6px;   /* tight gap above the question box */
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
}
.sq_hero h1 { color: #fff; margin: 4px 0; font-size: 30px; }
.sq_hero p { margin: 4px 0 0; font-size: 1.05rem; }
.sq_bounce { display: inline-block; font-size: 52px; animation: sq_bounce 1.6s ease-in-out infinite; }
@keyframes sq_bounce { 0%, 100% { transform: translateY(0) rotate(-6deg); } 50% { transform: translateY(-12px) rotate(6deg); } }
.sq_steps { margin-top: 10px; font-size: 0.95rem; opacity: 0.95; }

/* Two classes so it beats .clsBlueContainer's 20px margin (application.css loads after this file). */
.sq_fun_box.dq_clsQuestionBox {
  width: auto; align-self: stretch;
  margin: 2px 18px 20px;   /* small gap under the top banner; same 18px at each side as the banner (.sq_hero) */
}
.sq_fun_box { border: 3px dashed #ffd633; background: linear-gradient(180deg, #fffdf0, #eef6ff); }
.sq_fun_box .dq_clsQuestionText { color: #1b3a6b; }
.sq_fun_box .dq_clsSubmit {
  background: linear-gradient(135deg, #ff9800, #e8478b);
  font-weight: bold;
  box-shadow: 0 4px 10px rgba(232, 71, 139, 0.4);
  animation: sq_pulse 2s ease-in-out infinite;
}
.sq_fun_box .dq_clsSubmit:hover { background: linear-gradient(135deg, #ffa726, #f0609f); }
@keyframes sq_pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } }

.sq_promo {
  width: min(760px, 92vw);
  margin: 26px auto 10px;
  text-align: center;
  background: linear-gradient(135deg, #0b3d6e, #1c5fa8);
  color: #fff;
  border-radius: 18px;
  padding: 22px 16px;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
}
.sq_promo h2 { color: #fff; margin: 0 0 6px; font-size: 1.5rem; }
.sq_promo > p { margin: 0 0 14px; }
.sq_promo_grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 10px; text-align: left; }
.sq_promo_card { background: rgba(255, 255, 255, 0.12); border-radius: 12px; padding: 10px 12px; }
.sq_promo_card .sq_emoji { font-size: 1.8rem; display: block; text-align: center; }
.sq_promo_card strong { display: block; text-align: center; }
.sq_promo_card span.sq_text { font-size: 0.92rem; }
.sq_promo_cta { margin-top: 16px; display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; }
.sq_promo_cta a {
  display: inline-block; padding: 12px 26px; border-radius: 25px; font-size: 1.1rem; font-weight: bold;
  text-decoration: none; white-space: nowrap;
}
.sq_join { background: #ffd633; color: #3d2e00; box-shadow: 0 0 14px rgba(255, 214, 51, 0.8); animation: sq_join_pulse 1.6s ease-in-out infinite; }
@keyframes sq_join_pulse {
  0%, 100% { transform: scale(1);    box-shadow: 0 0 10px rgba(255, 214, 51, 0.55); }
  50%      { transform: scale(1.08); box-shadow: 0 0 26px rgba(255, 214, 51, 1); }
}
.sq_login { background: transparent; color: #fff; border: 2px solid #fff; }
@media (prefers-reduced-motion: reduce) { .sq_bounce, .sq_fun_box .dq_clsSubmit, .sq_join { animation: none; } }

/* ---- Results / confirmation page ---- */
.sq_your_answer { display: inline-block; margin-top: 4px; padding: 8px 16px; border-radius: 25px; background: #dcefe0; color: #1a7f37; font-size: 1.1rem; }
.sq_pending { margin: 10px 0 0; color: #7a5b00; font-weight: bold; }
.sq_stat {
  width: 100%; box-sizing: border-box; margin: 16px 0; padding: 16px; text-align: center; border-radius: 18px;
  background: linear-gradient(135deg, #ff9800, #e8478b); color: #fff; box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
}
.sq_stat_icon { font-size: 2.2rem; display: block; animation: sq_bounce 1.6s ease-in-out infinite; }
.sq_stat_num { font-size: 3.4rem; font-weight: bold; line-height: 1.1; display: block; }
.sq_stat_label { font-size: 1.15rem; display: block; }
.sq_section_title { margin: 0 0 12px; font-size: 1.4rem; color: #1b3a6b; }
.sq_results_box { margin-bottom: 16px; }
.sq_results_empty { font-size: 1.05rem; color: #555; }
.sq_save_box {
  width: 100%; box-sizing: border-box; margin: 6px 0 16px; padding: 18px; text-align: center; border-radius: 18px;
  background: #fffbe6; border: 3px dashed #ffd633;
}
.sq_save_box p { margin: 0 0 12px; font-size: 1.05rem; }
.sq_email_form { margin-top: 18px; padding-top: 14px; border-top: 1px dashed #d4a017; display: flex; flex-direction: column; align-items: center; gap: 10px; }
.sq_email_form p { margin: 0; }
.sq_more { width: 100%; text-align: center; margin: 8px 0; }
.sq_big_btn { background: linear-gradient(135deg, #00a86b, #0288d1); font-size: 1.2rem; }

/* Yes / No / Skip buttons on the fun question box — colorful and chunky (the "your current answer" highlight classes still win). */
.sq_fun_box .dq_clsYesNoButtons .dq_clsButton { min-width: 110px; font-weight: bold; font-size: 17pt; box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25); }
.sq_fun_box .dq_clsYesNoButtons .dq_clsButton[value="Yes"]:not(.dq_clsButtonActive):not(.dq_clsButtonInactive) { background: linear-gradient(135deg, #2e9e5b, #5fcf80); }
.sq_fun_box .dq_clsYesNoButtons .dq_clsButton[value="No"]:not(.dq_clsButtonActive):not(.dq_clsButtonInactive) { background: linear-gradient(135deg, #d9463e, #f0827a); }
.sq_fun_box .dq_clsYesNoButtons .dq_clsButton[value="Skip"]:not(.dq_clsButtonActive):not(.dq_clsButtonInactive) { background: linear-gradient(135deg, #78909c, #a7b8c0); font-size: 13pt; }
.sq_fun_box .dq_clsYesNoButtons .dq_clsButton:hover { transform: scale(1.1) rotate(-1.5deg); }
.sq_fun_box .dq_clsInput { border: 2px solid #90caf9; }

/* ---- Phones: the question page and the results page (/daily_question, /daily_question/confirmation) ---- */
@media (max-width: 600px) {
  .dq_clsContainer { padding: 10px 6px; margin: 4px auto; max-width: 100%; }
  .dq_clsQuestionBox { padding: 16px 10px; }
  .dq_clsQuestionText { font-size: 26px; line-height: 1.25; }
  .dq_clsTitle { font-size: 20px; }

  .sq_hero { padding: 10px 12px 10px; border-radius: 14px; }
  .sq_hero h1 { font-size: 24px; display: inline-block; vertical-align: middle; margin: 0; }   /* same line as the emoji */
  .sq_hero p { font-size: 0.98rem; }
  .sq_bounce { font-size: 32px; vertical-align: middle; margin-right: 6px; }

  .dq_clsButton { padding: 11px 18px; font-size: 13pt; }
  .dq_clsActions { gap: 10px; }
  .dq_clsActions .dq_clsButton { width: 100%; box-sizing: border-box; text-align: center; }
  .dq_clsYesNoButtons { gap: 10px; }
  .sq_fun_box .dq_clsYesNoButtons .dq_clsButton { min-width: 0; flex: 1 1 28%; font-size: 15pt; padding: 12px 8px; }
  .sq_fun_box .dq_clsYesNoButtons .dq_clsButton[value="Skip"] { font-size: 12pt; }
  .dq_clsSubmit, .sq_fun_box .dq_clsSubmit { width: 100%; max-width: 340px; min-width: 0; box-sizing: border-box; }
  .dq_clsInput { max-width: 100%; box-sizing: border-box; font-size: 16px; }
  .dq_clsExistingAnswer { padding: 10px 12px; }

  /* Results table: smaller type, labels may wrap, tighter cells so all four columns fit a phone. */
  .dq_clsBreakdownTable { font-size: 0.82em; margin: 10px 0; }
  .dq_clsBreakdownTable thead th { padding: 6px 2px; font-size: 0.85em; }
  .dq_clsBreakdownTable tbody th { white-space: normal; overflow-wrap: anywhere; padding: 8px 4px; }
  .dq_clsBreakdownTable tbody td { padding: 8px 2px; }

  .sq_stat { padding: 12px 8px; border-radius: 14px; }
  .sq_stat_num { font-size: 2.8rem; }
  .sq_stat_label { font-size: 1rem; }
  .sq_section_title { font-size: 1.2rem; }
  .sq_save_box { padding: 14px 10px; }
  .sq_your_answer { font-size: 1rem; padding: 6px 12px; }
  .sq_promo { width: 100%; box-sizing: border-box; padding: 16px 10px; border-radius: 14px; }
  .sq_promo h2 { font-size: 1.25rem; }
  .sq_promo_grid { grid-template-columns: 1fr; }
  .sq_promo_cta a { width: 100%; box-sizing: border-box; text-align: center; }
}

/* Event date/place/GPS/notes under the question text */
.sq_details { margin: 0 auto 14px; padding: 10px 14px; max-width: 560px; text-align: left; background: #fff; border: 2px solid #90caf9; border-radius: 12px; color: #1f2d3d; }
.sq_details p { margin: 4px 0; overflow-wrap: anywhere; }
.sq_event_tag { background: #e8478b; color: #fff; border-radius: 6px; padding: 1px 7px; font-size: 0.75rem; font-weight: bold; vertical-align: middle; }
.sq_gps_copy { margin-left: 6px; padding: 1px 10px; font-size: 0.85em; font-weight: bold; border-radius: 10px; border: 1px solid #90caf9; background: #f4f9ff; cursor: pointer; }
.sq_gps_link { font-weight: bold; color: #0a58ca; text-decoration: underline; }
.sq_gps_msg { color: #2e7d32; font-weight: bold; }
/* assets/stylesheets/dashboard.css */
.db_dashboard-page {
  margin: 0 auto;
  padding: 6px 20px 20px;
  width: 100%;
  box-sizing: border-box;
}

.db_dashboard-page h1 {
  color: #007bff;
  text-align: center;
  margin-top: 0;
  margin-bottom: 6px;
  font-size: 1.8em;
}

section {
  margin-bottom: 30px;
  padding: 18px;
  border: 1px solid rgba(0, 123, 255, 0.18);
  border-radius: 16px;
  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);
}

section h2 {
  color: #00b7eb;
  font-size: 1.5em;
  margin-bottom: 10px;
}

ul {
  list-style: none;
  padding: 0;
}

ul li {
  margin-bottom: 10px;
  font-size: 15pt;
}

/* Existing styles */
.db_match-teaser {
  margin-top: 1rem;
  font-style: italic;
  color: #007bff;
  text-align: center;
}

/* A festive gradient card in place of the mismatched blue .clsBlueContainer
   that used to sit inside this already-green-themed section — see
   .db_dash-events below for the section's own green border/heading color. */
.db_events-container {
  background: linear-gradient(135deg, #f3fff8, #e6f9f0);
  border-radius: 10px;
  padding: 10px;
  box-shadow: 0 2px 6px rgba(40, 167, 69, 0.15);
}

.db_events-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 15pt;
  border-radius: 10px;
  overflow: hidden;
}



.db_events-table td {
  padding: 12px;
  text-align: left;
  border-bottom: 1px solid #ddd;
}

.db_events-table th {
  background: linear-gradient(135deg, #28a745, #1e7e34);
  border-bottom: 1px solid #ddd;
  color: white;
  font-weight: bold;
  padding: 12px;
  text-align: left;
}


.db_events-table tr:nth-child(even) {
  background-color: #f8f9fa;
}

.db_events-table tr:hover {
  background-color: #e6f9f0;
}

.db_events-icon {
  margin-right: 4px;
}

.db_events-name-link {
  display: block;
  color: #1e7e34;
  font-weight: bold;
  text-decoration: none;
}

.db_events-name-link:hover {
  text-decoration: underline;
}

.db_events-interested-badge {
  display: inline-block;
  background: linear-gradient(135deg, #d4f7e2, #b7ecc9);
  color: #1e7e34;
  font-weight: bold;
  padding: 3px 10px;
  border-radius: 12px;
  font-size: 0.85em;
}

/* Admin-only — red-shaded background + bold red border, same "this is
   admin-only" convention as .clsAdminOnlyBadge, sized down to sit as a
   small chip next to the public interested-count badge above. */
.db_events-admin-chip {
  display: inline-block;
  margin-left: 6px;
  background-color: #fdecea;
  border: 1px solid #c0392b;
  color: #c0392b;
  font-weight: bold;
  padding: 1px 7px;
  border-radius: 10px;
  font-size: 0.7em;
  white-space: nowrap;
}

/* Admin-only show/hide of who's actually interested — a plain <details>, no
   JS needed. Collapsed by default so it doesn't clutter the table. */
.db_events-who-interested {
  margin-top: 6px;
  padding: 6px 10px;
  font-size: 0.8em;
  color: #7f1d1d;
  /* Admin-only: real usernames — shaded red with a bold red border so it is never mistaken for member-facing content. */
  background: #fdecea;
  border: 3px solid #c62828;
  border-radius: 8px;
}
.db_events-who-interested summary {
  cursor: pointer;
  color: #b71c1c;
  font-weight: bold;
}

/* :not(.db_events-name-link) — this used to blanket-style every <a> in the
   table as a blue button (originally just "More Info"/"Edit"); once the
   event name itself became a plain link it started rendering as a big blue
   button too, which is not the intent. */
.db_events-table td a:not(.db_events-name-link):not(.db_events-admin-chip) {
  padding: 8px 16px;
  font-size: 15pt;
  background-color: #007bff;
  color: white;
  border-radius: 4px;
  text-decoration: none;
  display: inline-block;
  touch-action: manipulation; /* Improve touch responsiveness */
}

/* Mobile styles */
@media (max-width: 768px) {
  .db_dashboard-page {
    padding: 10px;
  }

  section {
    padding: 10px;
    margin-bottom: 20px;
  }

  section h2 {
    font-size: 1.3em;
  }

  ul li {
    font-size: 15pt;
    padding: 8px 0;
  }

  .db_events-table {
    font-size: 15pt;
  }

  .db_events-table thead {
    display: none; /* Hide header on mobile */
  }

  .db_events-table tr {
    display: block;
    margin-bottom: 15px;
    border: 1px solid #dee2e6;
    border-radius: 4px;
    padding: 10px;
    background-color: #fff;
  }

  .db_events-table tr:nth-child(odd) {
    background-color: #f9f9f9; /* Light gray for odd rows */
  }

  .db_events-table tr:nth-child(even) {
    background-color: #ffffff; /* White for even rows */
  }

  .db_events-table td {
    display: block;
    text-align: left;
    padding: 8px 10px;
    border: none;
    font-size: 15pt;
    background-color: #f9f9f9; /* Light gray for data fields */
    margin-bottom: 5px;
    border-radius: 4px;
  }

  .db_events-table td::before {
    content: attr(data-label);
    font-weight: bold;
    display: block;
    margin-bottom: 4px;
    color: #004085; /* Dark blue for label contrast */
    background-color: #cce5ff; /* Light blue background for labels */
    padding: 2px 8px;
    border-radius: 3px;
  }

  /* Show only critical columns on mobile */
  .db_events-table td:nth-child(1), /* Event Date */
  .db_events-table td:nth-child(2) { /* Event Name (now also the edit-answer link) */
    display: block;
  }

  .db_events-table td:nth-child(3), /* # of People Interested */
  .db_events-table td:nth-child(4) { /* Notes */
    display: none; /* Hide less critical columns */
  }

  .db_events-table td a:not(.db_events-name-link):not(.db_events-admin-chip) {
    width: 100%;
    padding: 10px;
    font-size: 15pt;
    margin: 5px 0;
  }

  .clsBlueContainer {
    padding: 10px;
  }

  .db_match-teaser {
    font-size: 15pt;
  }

  .db_dash-actions .clsBlueButton {
    display: block;
    width: 100%;
    max-width: 200px;
    margin: 10px auto;
    padding: 10px;
    font-size: 15pt;
    text-align: center;
  }
}
.db_dash-random p {
  font-size: 1.5em;
  font-weight: bold;
  color: #007bff;
  margin-bottom: 15px;
}

@media (max-width: 768px) {
  .db_dash-random p {
    font-size: 1.3em;
  }
}

.db_qotd-today, .db_qotd-yesterday {
  background: #f9f9f9;
  padding: 15px;
  border-radius: 8px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  margin-bottom: 20px;
  text-align: center;
  max-width: 600px;
  margin-left: auto;
  margin-right: auto;
}

.db_qotd-today h2, .db_qotd-yesterday h2 {
  color: #007bff;
  margin-bottom: 10px;
}

.db_qotd-today p, .db_qotd-yesterday p {
  font-size: 15pt;
  margin-bottom: 10px;
}

.db_qotd-percent {
  font-size: 1rem;
  color: #555;
  margin-top: 4px;
}

/* Responsive QOTD Row */
.db_checkin-row {
  width: 100%;
  box-sizing: border-box;
  margin-bottom: 8px;
}

.db_checkin-group {
  border: 2px solid #e8590c;
  background-color: #fff3e8;
  padding-top: 6px;
  margin-top: 0;
}

.db_checkin-group h2 {
  margin-top: 0;
}

.db_checkin-header-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}

.db_checkin-header-row h2 {
  margin-bottom: 0;
  white-space: nowrap;
  flex: 0 0 auto;   /* "☁️ Smoke Signal" keeps its natural width so the status can sit beside it when there is room */
}

.db_checkin-status {
  flex: 1 1 220px;  /* beside the title when ~220px is free, otherwise wraps to its own line below it */
  color: #555;
}

.db_checkin-title-link {
  color: inherit;
  text-decoration: none;
}

.db_checkin-title-link:hover {
  text-decoration: underline;
}

.db_checkin-setup-actions {
  display: flex;
  gap: 16px;
  align-items: center;
}

/* Nomad Pulse sits above the two Question of the Day cards: same total width as that row (two 600px cards + the 20px gap), centered. */
.db_pulse-wrap { max-width: 1220px; margin: 0 auto; box-sizing: border-box; }
@media (max-width: 768px) {
  .db_pulse-wrap { padding: 0 10px; max-width: 100%; }
}

.db_qotd-row {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  justify-content: center;
  margin-bottom: 8px;
  width: 100%;
  box-sizing: border-box;
}

.db_dash-events {
  margin-top: 0;
  padding-top: 6px;
}

.db_dash-events h2 {
  margin-top: 0;
}

.db_qotd-row section {
  flex: 1;
  min-width: 280px;
  max-width: 600px;
  width: 100%;
  box-sizing: border-box;
}

.db_qotd-percent {
  font-size: 15pt;
  color: #555;
  margin-top: 4px;
}

/* Today = warm accent, Yesterday = cooler/muted accent — makes the two
   cards visually distinct from each other at a glance. */
.db_qotd-today_group {
  border: 2px solid #f5a623;
  background-color: #fff8ec;
  padding-top: 6px;
}

.db_qotd-yesterday_group {
  border: 2px solid #6c757d;
  background-color: #f4f5f6;
  padding-top: 6px;
}

.db_qotd-today_group h2,
.db_qotd-yesterday_group h2 {
  margin-top: 0;
}

.db_qotd-icon {
  margin-right: 4px;
}

.db_qotd-bars {
  margin-top: 10px;
}

.db_qotd-bar-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
}

.db_qotd-bar-label {
  /* Was a fixed 70px, which clipped longer options (e.g. "Sometimes") with
     an ellipsis even when there was plenty of room in the row — size to
     content instead, with 70px only as a floor for short labels like "Yes". */
  min-width: 70px;
  flex-shrink: 0;
  font-size: 0.85em;
  color: #444;
  white-space: nowrap;
}

.db_qotd-bar-track {
  display: flex;   /* members' bar + (when there are any) the guests' bar side by side */
  flex: 1;
  height: 10px;
  background-color: #e9ecef;
  border-radius: 5px;
  overflow: hidden;
}

.db_qotd-bar-fill {
  display: block;
  height: 100%;
  border-radius: 5px;
}

.db_qotd-bar-fill-today {
  background-color: #f5a623;
}

.db_qotd-bar-fill-yesterday {
  background-color: #6c757d;
}

/* Guests (visitors without an account) — a second bar color, plus the little legend shown under the bars when any guest answered. */
.db_qotd-bar-fill-guest { background-color: #1b998b; }
.db_qotd-legend { margin: 6px 0 0; font-size: 0.85rem; color: #444; }
.db_qotd-swatch { display: inline-block; width: 12px; height: 12px; border-radius: 3px; vertical-align: -1px; }
.db_qotd-legend-note { color: #777; }

/* Mobile: stack + full width */
@media (max-width: 768px) {
  .db_qotd-row {
    flex-direction: column;
    align-items: stretch;
    padding: 0 10px;
  }
  
  .db_qotd-row section {
    min-width: 0;
    max-width: 100%;
    width: 100%;
  }
   .db_dash-row-flex {
    flex-direction: column;
  }
  .db_dash-row-flex > section {
    flex: 1 1 auto;
    min-width: 0;
  }

}
/* Flex row for Saved Searches & Trending Questions */
.db_dash-row-flex {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  margin-bottom: 30px;
}
.db_dash-row-flex > section {
  flex: 1 1 300px;   /* grow, shrink, min 300px */
  min-width: 280px;
}

.db_dash-searches h2,
.db_dash-trending h2,
.db_dash-notifications h2,
.db_dash-random h2,
.db_dash-due h2 {
  margin-top: 0;
}

.db_qotd-bars-hidden-note {
  font-size: 0.8em;
  color: #888;
  opacity: 0.85;
  margin: 4px 0 0;
}

.db_qotd-answer-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}
.db_qotd-answer-row p {
  margin: 0;
}
.db_qotd-answer-row .clsButton {
  margin: 0;
}

/* Compact version of .clsAdminOnlyBadge for this specific note, sized to
   match .db_qotd-bars-hidden-note next to it. Deliberate, explicit exception
   to the site's 15pt text floor (see docs/design.md "Type") for this one
   admin-only aside — the maintainer asked for it after being told about the
   rule, so don't "fix" this back to 15pt on a future pass. */
.db_qotd-admin-hidden-note {
  display: block;
  margin: 6px 0 0;
  padding: 4px 10px;
  font-size: 0.8em;
  opacity: 0.9;
}

.db_qotd-not-answered {
  color: #a67c00;
  background: #fffbe0;
  border: 1px solid #d4ac0d;
  border-radius: 6px;
  padding: 6px 10px;
  font-weight: bold;
  display: inline-block;
}

/* Gentle glow-pulse on the "You haven't answered this yet" note (today's and
   yesterday's Question of the Day) so it draws the eye. */
.db_qotd-not-answered-pulse {
  animation: db_qotd-not-answered-pulse 1.8s ease-in-out infinite;
}
@keyframes db_qotd-not-answered-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(212, 172, 13, 0.6); transform: scale(1); }
  70%  { box-shadow: 0 0 0 12px rgba(212, 172, 13, 0); transform: scale(1.04); }
  100% { box-shadow: 0 0 0 0 rgba(212, 172, 13, 0); transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .db_qotd-not-answered-pulse { animation: none; }
}

.db_qotd-firepit-invite {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 10px 0 0;
  padding: 8px 12px;
  background: linear-gradient(90deg, #fff3e0, #ffe8d6);
  border: 1px solid #e8a35c;
  border-radius: 8px;
  text-decoration: none;
  color: #7a3e00;
  font-weight: bold;
}
.db_qotd-firepit-invite:hover {
  background: linear-gradient(90deg, #ffe8d6, #ffdcc0);
}
.db_qotd-firepit-invite .db_qotd-firepit-emoji {
  font-size: 1.2em;
}

/* "There's activity at the camp fire" pulses (user, 11/2): a glow ring that grows and fades, no scaling, so the bar never grows past its box.
   TO REVERT: delete this block (and the db_qotd-activity-pulse class in dashboard.html.erb). */
.db_qotd-activity-pulse {
  animation: db_qotd-activity-pulse 1.6s ease-in-out infinite;
}
@keyframes db_qotd-activity-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(232, 120, 0, 0.65); }
  70%  { box-shadow: 0 0 0 12px rgba(232, 120, 0, 0); }
  100% { box-shadow: 0 0 0 0 rgba(232, 120, 0, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .db_qotd-activity-pulse { animation: none; }
}

.db_dash-count-badge {
  font-size: 0.6em;
  color: #666;
  font-weight: normal;
}

.db_notification-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.db_notification-card {
  margin-bottom: 0;
}

.db_notification-link {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 10px 14px;
  background: linear-gradient(135deg, #fff0f6, #ffe0ec);
  border: 1px solid #f8bbd0;
  border-radius: 12px;
  text-decoration: none;
  color: #333;
  transition: transform 0.15s, box-shadow 0.15s;
}

.db_notification-link:not(.db_notification-static):hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 10px rgba(232, 62, 140, 0.2);
}

.db_notification-static {
  cursor: default;
}

.db_notification-icon {
  font-size: 1.4em;
  line-height: 1.2;
}

.db_notification-text {
  display: flex;
  flex-direction: column;
  gap: 3px;
  flex: 1;
  min-width: 0;   /* lets a long message shrink to the card instead of pushing out of it */
}

.db_notification-text strong {
  color: #b3236f;
}

.db_notification-meta {
  font-size: 0.75em;
  color: #888;
}

.db_notification-msg {
  font-size: 0.9em;
  color: #555;
}

.db_notification-msg--clip {   /* error reports are long: show a 2-line clip; the notification itself has the whole thing */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  overflow-wrap: anywhere;
}

.db_notification-count {
  align-self: flex-start;
  background: #e83e8c;
  color: white;
  font-size: 0.75em;
  font-weight: bold;
  padding: 2px 8px;
  border-radius: 10px;
}

.db_dash-searches-trending-container {
  background: #eaf6ff;
  border: 1px solid #007bff;
  border-radius: 10px;
  padding: 20px;
}

/* Fun distinct color per dashboard container, so each section is easy to
   tell apart at a glance instead of every box being the same blue. */
.db_dash-events {
  background: #e6f9f0;
  border-color: #28a745;
}
.db_dash-events h2 {
  color: #1e7e34;
}

.db_dash-matches {
  background: #f3e8ff;
  border-color: #8e44ad;
}
.db_dash-matches h2 {
  color: #6c3483;
}

.db_dash-searches.db_dash-searches-trending-container {
  background: #e0f7fa;
  border-color: #17a2b8;
}
.db_dash-searches h2 {
  color: #117a8b;
}

.db_dash-trending.db_dash-searches-trending-container {
  background: #fff4e0;
  border-color: #fd7e14;
}
.db_dash-trending h2 {
  color: #c05e00;
}

.db_dash-rooms.db_dash-searches-trending-container {
  background: #ffece6;
  border-color: #e8590c;
  margin: 16px 0;
}
.db_dash-rooms h2 {
  color: #bf400c;
}
.db_room-teaser-heading {
  color: #bf400c;
  font-size: 1.15em;
  margin: 14px 0 8px;
}
.db_room-teaser-heading:first-of-type {
  margin-top: 4px;
}
.db_room-teaser-link {
  background: linear-gradient(135deg, #ffece6, #ffd3bd);
  border-color: #ff9662;
  color: #bf400c;
}
.db_room-teaser-link:hover {
  box-shadow: 0 4px 12px rgba(232, 89, 12, 0.3);
}
.db_room-teaser-stat {
  font-size: 0.85em;
  opacity: 0.85;
  white-space: nowrap;
}

.db_dash-notifications {
  background: #ffe8f0;
  border-color: #e83e8c;
}
.db_dash-notifications h2 {
  color: #b3236f;
}

.db_dash-random {
  background: #eef0ff;
  border-color: #6f42c1;
}
.db_dash-random h2 {
  color: #4b2e83;
}

.db_dash-due {
  background: #fffbe0;
  border-color: #d4ac0d;
  text-align: center;
}
.db_dash-due h2 {
  color: #a67c00;
}

.db_dash-due-question {
  font-size: 1.5em;
  font-weight: bold;
  color: #a67c00;
  margin-bottom: 15px;
}

.db_dash-random {
  text-align: center;
}

.db_dash-notifications-title {
  text-align: center;
}

.db_saved-search-name {
  text-decoration: none;
}

.db_saved-search-name:hover {
  text-decoration: underline;
}

.db_trending-range {
  font-size: 0.8em;
  color: #a5651e;
  margin-top: -6px;
  margin-bottom: 12px;
}

.db_trending-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.db_trending-card {
  margin-bottom: 0;
}

.db_trending-link {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  background: linear-gradient(135deg, #fff4e0, #ffe4c4);
  border: 1px solid #ffb877;
  border-radius: 12px;
  text-decoration: none;
  color: #c05e00;
  font-weight: bold;
  transition: transform 0.15s, box-shadow 0.15s;
}

.db_trending-link:hover {
  transform: translateY(-2px) scale(1.01);
  box-shadow: 0 4px 12px rgba(253, 126, 20, 0.3);
}

.db_trending-rank {
  font-size: 0.85em;
  color: #fd7e14;
  min-width: 22px;
}

.db_trending-icon {
  font-size: 1.3em;
}

.db_trending-name {
  flex: 1;
}

.db_trending-flame {
  font-size: 1.1em;
  animation: db_flame-flicker 1.4s infinite ease-in-out;
}

@keyframes db_flame-flicker {
  0%, 100% { transform: scale(1) rotate(0deg); opacity: 1; }
  50% { transform: scale(1.15) rotate(-4deg); opacity: 0.85; }
}

/* Same gentle attention-getting pulse as the Android app's dashboard Check-In
   button (pulseCheckInButton() in DashboardActivity.kt) — 1.08x scale, 0.7s
   each way. Only ever applied to db_checkinNowBtn, which only renders while
   there's an unconfirmed check-in for today, so this stops on its own the
   moment the check-in row re-renders after confirming. */
.db_checkin-pulse {
  animation: db_checkin-pulse 1.4s infinite ease-in-out;
}

@keyframes db_checkin-pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.08); }
}

/* Doubles as both: (1) the "a missed check-in wouldn't actually reach
   anyone" warning (contact still unaccepted) shown next to an otherwise-
   confirmed check-in, and (2) the Smoke Signal setup nudge's "next step"
   line once the user has started setup but isn't fully enabled yet (see
   _checkin_row.html.erb). Shown to every user, not just admins, so it uses
   the site's plain "warning banner" colors (bg #fff3cd / text #856404 /
   border #ffeeba), not the red-shaded-bg + bold-red-border convention
   docs/design.md reserves specifically for admin-only markers — that combo
   would misread as "this is an admin thing" here. Pulses so it doesn't
   blend into the surrounding page. */
.db_checkin-no-contacts-alert {
  margin-top: 10px;
  padding: 10px 14px;
  background: #fff3cd;
  border: 1px solid #ffeeba;
  border-radius: 10px;
  color: #856404;
  font-weight: bold;
  animation: db_checkin-no-contacts-pulse 1.6s ease-in-out infinite;
}

.db_checkin-no-contacts-alert a {
  color: #856404;
  text-decoration: underline;
}

@keyframes db_checkin-no-contacts-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(133, 82, 4, 0.35); }
  50%      { box-shadow: 0 0 0 6px rgba(133, 82, 4, 0); }
}

@media (prefers-reduced-motion: reduce) {
  .db_checkin-no-contacts-alert { animation: none; }
}

.db_saved-search-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.db_saved-search-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 0;
  padding: 10px 14px;
  background: linear-gradient(135deg, #eef7ff, #e0f3ff);
  border: 1px solid #bfe3ff;
  border-radius: 12px;
  transition: transform 0.15s, box-shadow 0.15s;
}

.db_saved-search-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 10px rgba(0, 123, 255, 0.15);
}

.db_saved-search-info {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.db_saved-search-name {
  font-weight: bold;
  color: #0288d1;
}

.db_saved-search-date {
  font-size: 0.75em;
  color: #666;
}

/* Small inline variant of .clsAdminOnlyBadge, sized to sit next to the
   "(X answered)" QOTD stat instead of the default badge padding/size. */
/* Extra-specific selector (not just .db_qotd-admin-chip) so this reliably
   wins over .clsAdminOnlyBadge's own padding/border/radius regardless of
   which file Sprockets' require_tree happens to concatenate last. */
.db_qotd-percent .db_qotd-admin-chip {
  margin-left: 8px;
  padding: 1px 7px;
  font-size: 0.65em;
  font-weight: bold;
  border-width: 1px;
  border-radius: 10px;
  vertical-align: middle;
  text-decoration: none;
  white-space: nowrap;
}

/* Red = "admin-only" everywhere on the site. */
.db_clsAdminOnlyBox {
  margin: 0.5rem 0 1.5rem;
  padding: 12px;
  border: 2px solid #dc3545;
  border-radius: 6px;
  background-color: #fdecea;
}

.db_clsLocationNudge {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 0.5rem 0 1.5rem;
  padding: 10px 14px;
  border: 1px solid #90caf9;
  border-radius: 6px;
  background-color: #e3f2fd;
}

/* button_to renders a <button> in its own <form> — reset it to read as a
   plain inline link (like the .clsBlueLink <a> tags next to it) instead of
   showing default browser button chrome. */
.db_clsLinkButton {
  background: none;
  border: none;
  cursor: pointer;
  font-size: inherit;
  font-family: inherit;
}

/* A stray unscoped "button:hover { background: #009ACD; }" in
   beta_tester.css leaks onto every <button> site-wide (Sprockets
   require_tree concatenates every stylesheet into one file), which made a
   .db_clsLinkButton like the Dashboard's "Dismiss" go blue-background on
   hover while its sibling <a class="clsBlueLink"> ("Set up") just
   underlined — same look at rest, different look on hover. This has
   higher specificity (one class + pseudo vs. a bare element + pseudo) so
   it wins without needing !important. */
.db_clsLinkButton:hover {
  background: none;
}

.db_clsAdminOnly {
  background-color: #dc3545;
}

/* ============================================================
   MOCKUP — "less Windows-XP" pass, dashboard only.
   Same blue/yellow family, just: bigger corner radii, soft
   elevation shadows instead of flat 1px outlines, gentle
   gradients instead of solid fills, and a bit more breathing
   room. Everything below is scoped under .db_dashboard-page so
   no other page on the site is affected. Revert by restoring
   the .bak file saved alongside this one.
   ============================================================ */

.db_dashboard-page h1 {
  color: #0288d1;
  letter-spacing: 0.01em;
  margin-bottom: 10px;
}

.db_dashboard-page .clsBlueContainer {
  background: linear-gradient(160deg, #f3faff, #e3f2fd);
  border-radius: 20px;
  box-shadow: 0 6px 20px rgba(2, 136, 209, 0.10);
  border: 1px solid #d7ecfc;
}

.db_dashboard-page section {
  border: 1px solid rgba(0, 123, 255, 0.18);
  border-radius: 16px;
  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);
  padding: 18px;
  margin-bottom: 24px;
}

.db_dashboard-page section h2 {
  color: #0288d1;
}

/* Re-tint each colored card's border/shadow to match its own accent
   instead of a flat colored outline, echoing the section rule above. */
.db_dashboard-page .db_dash-events { border-color: rgba(40, 167, 69, 0.25); box-shadow: 0 3px 10px rgba(40, 167, 69, 0.10); }
.db_dashboard-page .db_dash-matches { border-color: rgba(142, 68, 173, 0.25); box-shadow: 0 3px 10px rgba(142, 68, 173, 0.10); }
.db_dashboard-page .db_dash-searches.db_dash-searches-trending-container { border-color: rgba(23, 162, 184, 0.25); box-shadow: 0 3px 10px rgba(23, 162, 184, 0.10); }
.db_dashboard-page .db_dash-trending.db_dash-searches-trending-container { border-color: rgba(253, 126, 20, 0.25); box-shadow: 0 3px 10px rgba(253, 126, 20, 0.10); }
.db_dashboard-page .db_dash-rooms.db_dash-searches-trending-container { border-color: rgba(232, 89, 12, 0.25); box-shadow: 0 3px 10px rgba(232, 89, 12, 0.10); }
.db_dashboard-page .db_dash-notifications { border-color: rgba(232, 62, 140, 0.25); box-shadow: 0 3px 10px rgba(232, 62, 140, 0.10); }
.db_dashboard-page .db_dash-random { border-color: rgba(111, 66, 193, 0.25); box-shadow: 0 3px 10px rgba(111, 66, 193, 0.10); }
.db_dashboard-page .db_dash-due { border-color: rgba(212, 172, 13, 0.3); box-shadow: 0 3px 10px rgba(212, 172, 13, 0.12); }

.db_dashboard-page .db_qotd-today_group,
.db_dashboard-page .db_qotd-yesterday_group {
  border-radius: 16px;
  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);
}
.db_dashboard-page .db_qotd-today_group { border-color: rgba(245, 166, 35, 0.4); }
.db_dashboard-page .db_qotd-yesterday_group { border-color: rgba(108, 117, 125, 0.35); }

.db_dashboard-page .db_checkin-group {
  border-radius: 16px;
  border-color: rgba(232, 89, 12, 0.35);
  box-shadow: 0 3px 10px rgba(232, 89, 12, 0.10);
}

.db_dashboard-page .db_clsAdminOnlyBox,
.db_dashboard-page .db_clsLocationNudge {
  border-radius: 14px;
}

.db_dashboard-page .db_events-container {
  border-radius: 16px;
}

.db_dashboard-page .db_events-table {
  border-radius: 16px;
}

/* Pulsing "Take a look on the Events page" button — shown when there are new events the
   member hasn't answered yet. */
.db_new-events-pulse {
  animation: db_new-events-pulse 1.8s ease-in-out infinite;
}
@keyframes db_new-events-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(0, 123, 255, 0.55); transform: scale(1); }
  70%  { box-shadow: 0 0 0 14px rgba(0, 123, 255, 0); transform: scale(1.05); }
  100% { box-shadow: 0 0 0 0 rgba(0, 123, 255, 0); transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .db_new-events-pulse { animation: none; }
}

/* Gentle pulse on a Trending Questions card's "Not answered yet" pill. */
.db_trending-unanswered-pulse {
  animation: db_trending-unanswered-pulse 1.4s ease-in-out infinite;
}
@keyframes db_trending-unanswered-pulse {
  0%, 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(201, 168, 0, 0.5); }
  50% { transform: scale(1.06); box-shadow: 0 0 8px 3px rgba(201, 168, 0, 0.45); }
}
@media (prefers-reduced-motion: reduce) {
  .db_trending-unanswered-pulse { animation: none; }
}


/* "Yes, I'm still here" — the global .clsButton is a fixed 40px tall single line, which clipped this wording. */
.db_still_here_btn {
  height: auto;
  min-height: 44px;
  padding: 8px 18px;
  line-height: 1.25;
  white-space: normal;
  text-align: center;
}

/* ── Phones: stop wasting the sides of the dashboard ─────────────────────────────────────────────────────
   Page padding + blue container margin/padding + card padding stacked up to ~80px per side on a 360px phone. */
@media (max-width: 699px) {
  .db_dashboard-page { padding: 6px 6px 12px; }
  .db_dashboard-page .clsBlueContainer { margin: 6px 0; padding-left: 8px; padding-right: 8px; border-radius: 16px; }
  .db_dashboard-page section { padding: 12px; margin-bottom: 18px; }
  .db_qotd-row section { min-width: 0; max-width: none; }

  /* Location line: text first, then the button on its own full-width row, then the link. */
  .db_clsLocationNudge { padding: 10px; }
  .db_still_here_form { display: block !important; width: 100%; margin: 6px 0 !important; }
  .db_still_here_btn { width: 100%; margin: 0 !important; }
}

/* Phones: Today's / Yesterday's Question of the Day cards were laptop-sized on a small screen — a tad smaller.
   (Deliberately below the usual 15pt floor at the maintainer's request; laptop sizes are unchanged.) */
@media (max-width: 699px) {
  .db_qotd-today_group, .db_qotd-yesterday_group { line-height: 1.4; }  /* size now comes from the site-wide phone scale-down in application.css */
  .db_qotd-today_group h2, .db_qotd-yesterday_group h2 { font-size: 1.25em; margin-bottom: 6px; }
  .db_qotd-today_group p, .db_qotd-yesterday_group p { margin: 6px 0; }
  .db_qotd-bar-label { min-width: 0; }
  /* The label used to be one unwrappable line next to the bar, so a long option text ate the whole row and squeezed
     the bar to nothing on a phone. Now the label sits on its own line (it may wrap) and the bar gets the full width. */
  .db_qotd-bar-row { flex-direction: column; align-items: stretch; gap: 3px; }
  .db_qotd-bar-label { white-space: normal; text-align: left; }
  .db_qotd-bar-track { flex: none; width: 100%; }
}

/* Phones: the "Dashboard" page title was laptop-sized (1.8em ≈ 27pt) — a little smaller. */
@media (max-width: 699px) {
  .db_dashboard-page h1 { font-size: 1.5em; margin-bottom: 4px; }  /* + the site-wide phone scale-down ≈ 20pt on screen */
}


/* ── My Upcoming Events: cards instead of a table (db_ev_*) ───────────────────────────────────────────── */
.db_ev_list { display: flex; flex-direction: column; gap: 14px; margin-top: 10px; }

.db_ev_card {
  display: flex;
  gap: 14px;
  align-items: flex-start;
  padding: 14px;
  background: #c8e6c9; /* light green — same as the events page's "Yes" row; this list only holds events the user said Yes to */
  border: 1px solid rgba(40, 167, 69, 0.3);
  border-radius: 16px;
  box-shadow: 0 3px 10px rgba(40, 167, 69, 0.12);
}

.db_ev_card--today {
  border-color: #ffd43b;
  box-shadow: 0 0 0 3px rgba(255, 212, 59, 0.45), 0 3px 10px rgba(40, 167, 69, 0.12);
}

/* calendar-page tile */
.db_ev_tile {
  flex: 0 0 76px;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  line-height: 1.05;
  padding: 6px 4px 8px;
  color: #fff;
  background: linear-gradient(180deg, #1e7e34, #28a745);
  border-radius: 14px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2);
}
.db_ev_tile_month { font-size: 15pt; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #ffe066; }
.db_ev_tile_day   { font-size: 28pt; font-weight: bold; margin: 2px 0; }
.db_ev_tile_dow   { font-size: 15pt; opacity: 0.95; }
.db_ev_tile_full  { display: none; }   /* "Oct 6, 2027" — phones only, see the max-width:699px block below */
.db_ev_datebar { display: contents; }  /* laptop: no effect on layout */
.db_ev_pill_phone { display: none; }   /* phones only: a copy of the "In N days" pill that sits next to the date bubble */

.db_ev_body { flex: 1 1 auto; min-width: 0; }

.db_ev_top { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.db_ev_name { font-size: 1.15em; font-weight: bold; overflow-wrap: anywhere; }

.db_ev_pill {
  display: inline-block;
  padding: 2px 12px;
  font-weight: bold;
  color: #1e5631;
  background: #dcefe0;
  border: 1px solid #28a745;
  border-radius: 999px;
  white-space: nowrap;
}
.db_ev_pill--today { color: #4d3800; background: #ffe066; border-color: #c9a800; }

.db_ev_when { margin-top: 4px; color: #444; }
.db_ev_when_phone { display: none; }   /* phones only, see the max-width:699px block below */
.db_ev_tz { color: #777; }

.db_ev_meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin-top: 8px; }
.db_ev_you { color: #666; }

.db_ev_notes {
  margin-top: 10px;
  padding: 8px 12px;
  background: #f1faf4;
  border-radius: 10px;
  overflow-wrap: anywhere;
}

/* phones: smaller tile so the text gets the room */
@media (max-width: 699px) {
  .db_ev_card { gap: 8px; padding: 10px; flex-direction: column; align-items: stretch; }
  /* The date bubble sits ABOVE the event name, laid out in one row (MON 19 Oct), not in a tall column beside it. */
  .db_ev_datebar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
  .db_ev_tile { flex: none; flex-direction: row; align-items: baseline; justify-content: center; gap: 8px; padding: 4px 14px; }
  .db_ev_tile_month, .db_ev_tile_day:not(.db_ev_tile_unknown) { display: none; }
  .db_ev_tile_full { display: inline; font-size: 13pt; font-weight: bold; color: #ffe066; }
  .db_ev_tile_dow { font-size: 13pt; }
  .db_ev_pill_phone { display: inline-block; }
  .db_ev_top .db_ev_pill { display: none; }   /* the pill moved up next to the date bubble */
  /* Start and end each on their own line; the font scales with the screen width so a line never wraps. */
  .db_ev_when_wide { display: none; }
  .db_ev_when_phone { display: block; }
  .db_ev_when_line { white-space: nowrap; font-size: min(1em, 4.3vw); }
}

/* "See all events on the map" banner */
.db_ev_map {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 14px;
  margin: 14px 0;
  padding: 14px 16px;
  color: #fff;
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 100%);
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
}
.db_ev_map_emoji { font-size: 30pt; line-height: 1; }
.db_ev_map_text { flex: 1 1 200px; display: flex; flex-direction: column; line-height: 1.3; }
.db_ev_map_text strong { color: #ffe066; }
.db_ev_map_text span { color: #e3f2fd; }
.db_ev_map_btn {
  display: inline-block;
  padding: 10px 20px;
  font-weight: bold;
  color: #2b2b2b;
  background: #ffd43b;
  border-radius: 999px;
  text-decoration: none;
  text-align: center;
  box-shadow: 0 0 14px rgba(255, 212, 59, 0.55);
}
.db_ev_map_btn:hover { background: #ffe066; color: #2b2b2b; }
@media (max-width: 699px) {
  .db_ev_map_btn { width: 100%; box-sizing: border-box; }
}

/* "👀 Take a look on the Events page" — the global .clsButton is a fixed 40px single line, so long text spilled out. */
.db_new-events-pulse {
  height: auto;
  min-height: 44px;
  max-width: 100%;
  box-sizing: border-box;
  padding: 8px 20px;
  line-height: 1.25;
  white-space: normal;
  text-align: center;
}


/* Saved Quests: the card used to be one non-wrapping row (info + two buttons, each with a 10px margin), which pushed
   the section wider than the screen on phones and carried the "Hide for now" button off the right edge. */
.db_saved-search-list { padding-left: 0; margin: 8px 0 0; list-style: none; }
.db_saved-search-card { flex-wrap: wrap; box-sizing: border-box; max-width: 100%; }
.db_saved-search-info { flex: 1 1 180px; min-width: 0; }
.db_saved-search-name { overflow-wrap: anywhere; }
.db_saved-search-actions { display: flex; flex-wrap: wrap; gap: 8px; flex: 0 0 auto; }
.db_saved-search-run { margin: 0; flex: 0 0 auto; }
@media (max-width: 699px) {
  .db_saved-search-actions { width: 100%; }
  .db_saved-search-run { flex: 1 1 0; }
}

/* Map banner: keep the 🗺️ and "Adventure's out there!" on ONE line (the text used to wrap under the emoji); on phones the
   button then sits on its own full-width row below them. */
.db_ev_map_text { flex: 1 1 0; min-width: 140px; }
@media (max-width: 699px) {
  .db_ev_map { gap: 8px 10px; padding: 12px; }
  .db_ev_map_emoji { font-size: 22pt; }
  .db_ev_map_text { min-width: 0; font-size: 13pt; }
  .db_ev_map_btn { flex: 0 0 100%; }
}


/* ── Random Question + Question Due cards (db_qcard*): dark gradient, big emoji, glowing yellow button ───────── */
.db_dashboard-page section.db_qcard {
  text-align: center;
  color: #fff;
  border: 0;
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
}
.db_dashboard-page section.db_qcard--random { background: linear-gradient(180deg, #2b1b6d 0%, #4b2e83 60%, #6f42c1 100%); }
.db_dashboard-page section.db_qcard--due    { background: linear-gradient(180deg, #0b2a5b 0%, #01579b 70%, #0288d1 100%); }
.db_dashboard-page .db_qcard_emoji { font-size: 34pt; line-height: 1; }
.db_dashboard-page .db_qcard h2 { margin: 4px 0 8px; color: #fff; }
.db_dashboard-page .db_qcard p.db_qcard_q {
  margin: 0 0 14px;
  font-size: 1.25em;
  font-weight: bold;
  line-height: 1.35;
  color: #fff;
  overflow-wrap: anywhere;
}
.db_dashboard-page .db_qcard_btn {
  display: inline-block;
  padding: 10px 28px;
  font-weight: bold;
  color: #2b2b2b;
  background: #ffd43b;
  border-radius: 999px;
  text-decoration: none;
  box-shadow: 0 0 14px rgba(255, 212, 59, 0.55);
}
.db_dashboard-page .db_qcard_btn:hover { background: #ffe066; color: #2b2b2b; }
@media (max-width: 699px) {
  .db_dashboard-page .db_qcard_emoji { font-size: 28pt; }
  .db_dashboard-page .db_qcard_btn { display: block; box-sizing: border-box; width: 100%; }
}

/* Dashboard heading: same plain look as before, just a smaller font (2026-10-07). */
.db_dashboard-page h1 { font-size: 1.3em; }
@media (max-width: 800px) {
  .db_dashboard-page h1 { font-size: 1.2em; }
}

/* QOTD question text and "You haven't answered this yet" are links to the answer page; keep their look. */
.db_dashboard-page .db_qotd-link { color: inherit; text-decoration: none; }
.db_dashboard-page .db_qotd-link:hover { text-decoration: underline; }

/* Phones: "Today's / Yesterday's Question of the Day" titles stay on ONE line — the font scales with the screen width. */
@media (max-width: 699px) {
  .db_qotd-today_group h2,
  .db_qotd-yesterday_group h2 {
    white-space: nowrap;
    overflow: hidden;
    /* font size: normal, shrunk only as much as needed to fit by the small script in dashboard.html.erb */
  }
}

/* ── Livelier Smoke Signal / Today's / Yesterday's question cards (look only — nothing removed or moved) ────────────
   Gradient fill, a coloured top band, a faint watermark emoji behind the text, a pill behind the Smoke Signal status,
   chunkier gradient answer bars, and a gentle lift on hover. */
.db_dashboard-page .db_checkin-group,
.db_dashboard-page .db_qotd-today_group,
.db_dashboard-page .db_qotd-yesterday_group {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-top-width: 7px;
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}
.db_dashboard-page .db_checkin-group:hover,
.db_dashboard-page .db_qotd-today_group:hover,
.db_dashboard-page .db_qotd-yesterday_group:hover {
  transform: translateY(-2px);
}
.db_dashboard-page .db_checkin-group::before,
.db_dashboard-page .db_qotd-today_group::before,
.db_dashboard-page .db_qotd-yesterday_group::before {
  position: absolute;
  right: 6px;
  bottom: -14px;
  z-index: -1;
  font-size: 96px;
  line-height: 1;
  opacity: 0.13;
  pointer-events: none;
}

/* Smoke Signal — sunset orange */
.db_dashboard-page .db_checkin-group {
  background: linear-gradient(135deg, #fff6ee 0%, #ffdcc2 100%);
  border-top-color: #e8590c;
}
.db_dashboard-page .db_checkin-group::before { content: "☁️"; }
.db_dashboard-page .db_checkin-group h2 { color: #c2410c; }
.db_dashboard-page .db_checkin-status {
  background: rgba(255, 255, 255, 0.7);
  border-radius: 12px;
  padding: 6px 12px;
  color: #5b3a1e;
}

/* Today — sunny gold */
.db_dashboard-page .db_qotd-today_group {
  background: linear-gradient(135deg, #fffaf0 0%, #ffe7b3 100%);
  border-top-color: #f5a623;
}
.db_dashboard-page .db_qotd-today_group::before { content: "☀️"; }
.db_dashboard-page .db_qotd-today_group h2 { color: #b45309; }
.db_dashboard-page .db_qotd-bar-fill-today { background: linear-gradient(90deg, #f7c04a, #f08a00); }

/* Yesterday — cool evening blue-grey */
.db_dashboard-page .db_qotd-yesterday_group {
  background: linear-gradient(135deg, #f6f8fb 0%, #dde4ef 100%);
  border-top-color: #5b6b8c;
}
.db_dashboard-page .db_qotd-yesterday_group::before { content: "🌙"; }
.db_dashboard-page .db_qotd-yesterday_group h2 { color: #3d4f78; }
.db_dashboard-page .db_qotd-bar-fill-yesterday { background: linear-gradient(90deg, #8d9bb8, #5b6b8c); }

.db_dashboard-page .db_qotd-bar-track {
  height: 12px;
  border-radius: 6px;
  background-color: rgba(255, 255, 255, 0.75);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12);
}
.db_dashboard-page .db_qotd-bar-fill { border-radius: 6px; }
.db_dashboard-page .db_qotd-bar-fill-guest { background: linear-gradient(90deg, #34b5a6, #1b998b); }

@media (prefers-reduced-motion: reduce) {
  .db_dashboard-page .db_checkin-group,
  .db_dashboard-page .db_qotd-today_group,
  .db_dashboard-page .db_qotd-yesterday_group { transition: none; }
  .db_dashboard-page .db_checkin-group:hover,
  .db_dashboard-page .db_qotd-today_group:hover,
  .db_dashboard-page .db_qotd-yesterday_group:hover { transform: none; }
}

/* "Today's / Yesterday's Question of the Day" titles stay on ONE line at every width (the small script in
   dashboard.html.erb shrinks the font only as much as needed — e.g. at a 1032px-wide window). */
.db_qotd-today_group h2,
.db_qotd-yesterday_group h2 {
  white-space: nowrap;
  overflow: hidden;
}

/* "Try online Camp Fires free for 7 days" banner on a phone: stacked and centered — emoji, then the full-width text, then a normal-sized
   button — instead of text squeezed into a thin column next to the emoji with a huge full-width button. Only this banner (.db_trial);
   the map banners that share .db_ev_map are untouched. TO REVERT: delete this block. */
@media (max-width: 699px) {
  .db_ev_map.db_trial { flex-direction: column; align-items: center; text-align: center; gap: 6px; padding: 12px 14px; margin: 10px 0; }
  .db_ev_map.db_trial .db_ev_map_emoji { font-size: 22pt; }
  .db_ev_map.db_trial .db_ev_map_text { flex: none; width: 100%; min-width: 0; font-size: 12pt; align-items: center; gap: 4px; }
  .db_ev_map.db_trial .db_ev_map_text strong { font-size: 1.05em; }
  .db_ev_map.db_trial form { margin: 0; }
  .db_ev_map.db_trial .db_ev_map_btn { flex: none; width: auto; max-width: 90%; padding: 8px 22px; font-size: 12pt; }
}

/* Phones: less space between the "🙈 Hide for now" button and the "Top Matches" / "Camp Fires" titles (the button strip reserved 58px). */
@media (max-width: 699px) {
  .db_dash-matches.hs_has_btn { padding-top: 46px !important; }
  .db_dash-matches h2#top-matches { margin-top: 0; }
  .db_dash-rooms.hs_has_btn { padding-top: 46px !important; }
  .db_dash-rooms h2 { margin-top: 0; }
}

/* Camp Fires: each sub-section (right now / newest / chairs / topics) sits in its own light box. */
.db_dash-rooms .db_room-box {
  background: #fff;
  border: 1px solid rgba(232, 89, 12, 0.35);
  border-radius: 12px;
  padding: 10px 12px;
  margin: 0 0 12px;
}
.db_dash-rooms .db_room-box .db_room-teaser-heading { margin: 0 0 8px; }
.db_dash-rooms .db_room-box > p:last-child,
.db_dash-rooms .db_room-box > ul:last-child { margin-bottom: 0; }
@media (max-width: 699px) {
  .db_dash-rooms .db_room-box { padding: 8px 8px; margin-bottom: 10px; }
}

/* Phones: the "✕ Hide" button used to sit beside each camp fire's coloured box and squeezed it. Now it sits INSIDE the box,
   top-right on the same line as the date / stats, and the box takes the full width. */
@media (max-width: 699px) {
  .db_dash-rooms .db_trending-card { display: block !important; position: relative; }
  .db_dash-rooms .db_trending-link { flex-wrap: wrap; row-gap: 4px; padding-bottom: 12px; }
  /* Top line: #rank, icon, the date / stats, and the Hide button at the far right; the name gets the full width beneath. */
  .db_dash-rooms .db_trending-link .db_trending-rank { order: 1; }
  .db_dash-rooms .db_trending-link .db_trending-icon { order: 2; }
  .db_dash-rooms .db_trending-link .db_room-teaser-stat { order: 3; flex: 1 1 0; min-width: 0; white-space: normal; padding-right: 84px; }
  .db_dash-rooms .db_trending-link .db_trending-name { order: 4; flex: 0 0 100%; min-width: 0; }
  .db_dash-rooms .db_trending-card .db_room-hide-form { position: static; }
  /* The top line (#rank, icon, date) and the Hide button share one fixed 32px row height, so their centres line up exactly. */
  .db_dash-rooms .db_trending-link .db_trending-rank,
  .db_dash-rooms .db_trending-link .db_trending-icon,
  .db_dash-rooms .db_trending-link .db_room-teaser-stat { min-height: 32px; display: flex; align-items: center; }
  .db_dash-rooms .db_trending-card .db_room-hide-form button {
    position: absolute; right: 10px; top: 11px; box-sizing: border-box; height: 32px;
    min-height: 32px !important; padding: 0 10px !important; font-size: 0.78em !important; line-height: 1 !important;
    background: rgba(255, 255, 255, 0.7) !important; color: #5a4a42 !important;
  }
}

/* Phones (user, 11/2): (1) Nomad Pulse — the long pill "Invite ONE friend and we double →" has white-space:nowrap inline and ran out of its
   container; on a phone every pill there may wrap inside the box and is centered. (2) "📍 See all events on the map" is smaller and stays on ONE
   line (the "See plans" button of the free-week banner, .db_trial, is untouched). TO REVERT: delete this block. */
@media (max-width: 699px) {
  .db_dash-pulse a { white-space: normal !important; max-width: 100%; box-sizing: border-box; text-align: center; }
  .db_dash-pulse span { min-width: 0; max-width: 100%; }
  .db_ev_map:not(.db_trial) .db_ev_map_btn { font-size: 11pt; padding: 8px 10px; white-space: nowrap; }
}

/* Dashboard on phones (user, 11/2): everything stays inside its container.
   Cause: ".db_dash-row-flex > section { flex: 1 1 300px; min-width: 280px }" is written AFTER the phone rule that sets min-width:0 / flex:auto, so on a
   phone it still won, the Saved Quests + Trending sections were wider than the screen, and their "🙈 Hide for now" button (pinned to the section's right
   edge) and the trending cards' right sides went off the page. This block comes last so the phone rules win.
   Also: tighter space under the Saved Quests cards, and the new "Go to my Quests page" link. TO REVERT: delete this block. */
@media (max-width: 768px) {
  .db_dash-row-flex { flex-direction: column; flex-wrap: nowrap; }
  .db_dash-row-flex > section { flex: 1 1 auto; min-width: 0; max-width: 100%; width: 100%; box-sizing: border-box; }
  .db_trending-list > li, .db_trending-card, .db_saved-search-card { min-width: 0; max-width: 100%; box-sizing: border-box; }
  .db_trending-name { min-width: 0; overflow-wrap: anywhere; }
}
.db_dash-searches .db_saved-search-list { margin-bottom: 0; }
.db_dash-searches .db_saved-search-card .clsButton { margin: 0; }
.db_saved-search-more { text-align: center; margin: 12px 0 0; }
.db_saved-search-more .clsButton { margin: 0; }

/* Top Matches (user, 11/2): less empty space between the "🙈 Hide for now" button and the "Top Matches" title. The button strip reserved 58px
   (46px on phones); the button itself ends about 40px from the top, so 44px is enough. The title's own top margin is zero on every screen size.
   TO REVERT: delete this block. */
.db_dash-matches.hs_has_btn { padding-top: 44px !important; }
.db_dash-matches h2#top-matches { margin-top: 0; }

/* Long event notes fold away behind "Show notes" (Events page + dashboard My Upcoming Events) — user, 11/2. TO REVERT: delete this block. */
.ev_notes_toggle summary { cursor: pointer; font-weight: bold; color: #0a58ca; list-style: none; }
.ev_notes_toggle summary::-webkit-details-marker { display: none; }
.ev_notes_toggle .ev_n_hide { display: none; }
.ev_notes_toggle[open] .ev_n_show { display: none; }
.ev_notes_toggle[open] .ev_n_hide { display: inline; }
.ev_notes_toggle[open] summary { margin-bottom: 4px; }

/* Dashboard "My Upcoming Events": event notes keep the line breaks and blank lines that were typed in them (user, 11/2). TO REVERT: delete this block. */
.db_ev_notes { white-space: pre-line; }
/* Admin: Event Passes page — red "admin only" container (like Manage Users) and a phone-friendly layout. */
.ep_page.clsBlueContainer {
  background: linear-gradient(160deg, #fff5f5, #fde3e3);
  border: 3px solid #c0392b;
  box-shadow: 0 6px 20px rgba(198, 40, 40, 0.15);
  box-sizing: border-box;
}
.ep_page section { border: 2px solid rgba(192, 57, 43, 0.55); background: rgba(255, 255, 255, 0.55); }
.ep_page h2 { color: #c0392b; }
.ep_code { font-size: 28pt; font-weight: bold; color: #01579b; margin: 6px 0; overflow-wrap: anywhere; }
.ep_page select, .ep_page input[type="text"] { max-width: 100%; box-sizing: border-box; font-size: 1rem; }
.ep_table { width: 100%; border-collapse: collapse; }
.ep_table th, .ep_table td { padding: 6px 8px; text-align: left; vertical-align: middle; }
.ep_table tbody tr { border-top: 1px solid #d9a6a0; }
.ep_table form { margin: 0; }

@media (max-width: 699px) {
  .ep_page select, .ep_page input[type="text"] { width: 100%; }
  .ep_code { font-size: 20pt; }
  .ep_show #ep_qr { max-width: 100%; }
  .ep_show #ep_qr img, .ep_show #ep_qr canvas { max-width: 100%; height: auto !important; }
  /* Each code becomes its own card instead of a wide table. */
  .ep_table thead { display: none; }
  .ep_table, .ep_table tbody, .ep_table tr, .ep_table td { display: block; width: 100%; box-sizing: border-box; }
  .ep_table tr { border: 2px solid rgba(192, 57, 43, 0.4); border-radius: 12px; margin-bottom: 10px; padding: 6px 4px; background: rgba(255, 255, 255, 0.7); }
  .ep_table td { padding: 3px 8px; }
  .ep_table td[data-label]:not([data-label=""])::before { content: attr(data-label) ": "; font-weight: bold; color: #c0392b; }
  .ep_table td .clsButton { margin: 4px 0; }
}
/* app/assets/stylesheets/events.css */
/* also, uses events_phone.css */

.ev_response {
  font-size: 15pt;
  margin: 0;
  color: #2e7d32;
}
.ev_form {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-top: 12px;
}
.ev_select {
  padding: 6px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 15pt;
}
.ev_submit {
  padding: 6px 12px;
}

.ev_login-blurb {
  background-color: #e3f2fd;
  border: 1px solid #bbdefb;
  border-radius: 8px;
  padding: 16px;
  margin: 20px 0;
  font-size: 15pt;
  color: #1565c0;
  text-align: center;
}
.ev_login-blurb p {
  margin: 0;
}

/* Search-by-name + State filter bar above the events table. */
.ev_filter-form {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  justify-content: center;
  margin: 0 0 18px;
}
.ev_filter-input {
  padding: 8px 12px;
  border: 1px solid #ccc;
  border-radius: 6px;
  font-size: 13pt;
  min-width: 220px;
  flex: 1 1 220px;
  max-width: 360px;
}
.ev_filter-select {
  padding: 8px 12px;
  border: 1px solid #ccc;
  border-radius: 6px;
  font-size: 13pt;
}

/* Card-like wrapper around the table: rounded corners + shadow instead of a flat blue box.
   border-collapse tables can't round their own corners, so the wrapper carries it and clips
   the table to match. */
.ev_table-wrap {
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 3px 10px rgba(0,0,0,0.12);
  padding: 0 !important;
}
.ev_table-wrap .ev_events-table {
  margin: 0;
}

.ev_events-table {
width: 100%;
margin: 20px 0;
border-collapse: collapse;
}

.ev_events-table td {
  padding: 14px 12px;
}

.ev_events-table th {
  background: linear-gradient(135deg, #0b2a5b, #01579b);
  color: #fff;
  font-weight: bold;
  padding: 14px 12px;
  text-align: left;
}

.ev_events-table tbody tr:nth-child(even) {
  background-color: #f4f8fc;
}

/* No row tint for "today"/"tomorrow" — the 🔥/✨ badges in the date cell
   already say it; the row background is reserved for RSVP status below, so
   scanning down the list quickly shows what still needs an answer.
   These all repeat the "tbody" ancestor (matching the nth-child zebra-stripe
   rule above) so their specificity is equal, not lower — otherwise the zebra
   stripe was winning on every even row regardless of source order. */
.ev_events-table tbody tr.past {
  background-color: #dddddd; /* grey */
}

/* RSVP-status row tint, so the list can be scanned quickly for what still
   needs an answer — skipped for past events (the grey above wins there). */
.ev_events-table tbody tr.rsvp-yes {
  background-color: #c8e6c9; /* light green */
}
.ev_events-table tbody tr.rsvp-no {
  background-color: #e0e0e0; /* neutral grey, a bit darker than nth-child striping */
}
.ev_events-table tbody tr.rsvp-none {
  background-color: #fff9c4; /* pale yellow — noticeable but not glaring */
}

/* Fun touches — icon per event, colorful "Today"/"Tomorrow" badges, a
   playful interest-count pill, and a little row hover lift. Nothing here
   removes or replaces content, just dresses it up. */
.ev_events-table tbody tr {
  transition: transform 0.12s ease, box-shadow 0.12s ease;
}
.ev_events-table tbody tr:hover {
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(0,0,0,0.15);
}

.ev_event-icon {
  font-size: 1.3em;
  vertical-align: middle;
  margin-right: 4px;
}

.ev_event-name-link {
  color: #0d47a1;
  text-decoration: underline;
  font-weight: bold;
}
.ev_event-name-link:hover {
  color: #08306b;
}

.ev_when-badge {
  display: inline-block;
  font-weight: bold;
  font-size: 0.8em;
  padding: 2px 10px;
  border-radius: 999px;
  margin-bottom: 4px;
  color: #fff;
}
.ev_when-today {
  background: linear-gradient(135deg, #ff7e5f, #feb47b);
}
.ev_when-tomorrow {
  background: linear-gradient(135deg, #43cea2, #185a9d);
}

.ev_interest-badge {
  display: inline-block;
  background: #fff3cd;
  color: #856404;
  border: 1px solid #ffe066;
  border-radius: 999px;
  padding: 2px 10px;
  font-weight: bold;
}

/* Admin-only show/hide of who's interested — a plain <details>, no JS
   needed. Collapsed by default so it doesn't clutter the table. Names link
   to that event's admin/questions/:id/users page. */
.ev_who-interested {
  margin-top: 4px;
  font-size: 0.8em;
  color: #555;
}
.ev_who-interested summary {
  cursor: pointer;
  color: #0a58ca;
  font-weight: bold;
}
.ev_who-interested a {
  color: #0a58ca;
}

/* "N days away" note after the event date */
.ev_days-until {
  display: inline-block;
  margin-left: 6px;
  font-weight: bold;
  color: #01579b;
}
.ev_days-until-today {
  color: #c0392b;
}

/* Yes/No pills once answered — same rounded-pill language as the "Yay or nay?" button below. */
.ev_rsvp-pill {
  display: inline-block;
  padding: 4px 14px;
  border-radius: 20px;
  font-weight: bold;
}
.ev_rsvp-pill-yes {
  background: #e8f5e9;
  color: #1a7f37;
  border: 1px solid #a3d9a5;
}
.ev_rsvp-pill-no {
  background: #fdecea;
  color: #c0392b;
  border: 1px solid #f1a9a0;
}
.ev_rsvp-pill-maybe {
  background: #fff8e1;
  color: #7a5200;
  border: 1px solid #ffd966;
}

/* Unanswered event: pulsing "Yay or nay?" button to nudge an answer */
.ev_answer-pulse {
  display: inline-block;
  padding: 6px 14px;
  border-radius: 20px;
  background: #ffd43b;
  color: #0b2a5b !important;
  font-weight: bold;
  text-decoration: none;
  animation: ev_answer-pulse 1.8s ease-in-out infinite;
}
@keyframes ev_answer-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(245, 166, 35, 0.6); transform: scale(1); }
  70%  { box-shadow: 0 0 0 14px rgba(245, 166, 35, 0); transform: scale(1.06); }
  100% { box-shadow: 0 0 0 0 rgba(245, 166, 35, 0); transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .ev_answer-pulse { animation: none; }
}


/* ── Events page: redesigned top (hero, reminder chip, search panel) — ev_top_* / ev_f_* ─────────────────── */
.ev_top_hero {
  text-align: center;
  margin: 12px 0 14px;
  padding: 20px 16px;
  color: #fff;
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 100%);
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
}
.ev_top_hero_emoji { font-size: 34pt; line-height: 1; }
.ev_top_hero h1 { margin: 4px 0 0; font-size: 24pt; color: #fff; }
.ev_top_hero p { margin: 4px 0 0; font-size: 15pt; color: #ffe066; }

/* "Reminder emails … On/Off" as a small centered chip instead of loose text */
.ev_top_reminder {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 4px 10px;
  margin: 12px auto 14px;
  padding: 8px 16px;
  width: fit-content;
  max-width: 100%;
  box-sizing: border-box;
  text-align: center;
  color: #2b2b2b;
  background: #fff;
  border: 1px solid #d7ecfc;
  border-radius: 999px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.ev_top_reminder small { flex-basis: 100%; color: #666; }
.ev_top_toggle { padding: 1px 14px; border-radius: 999px; font-weight: bold; text-decoration: none; }
.ev_top_toggle--on  { color: #1a7f37; background: #dcefe0; border: 1px solid #1a7f37; }
.ev_top_toggle--off { color: #a71d2a; background: #fdecea; border: 1px solid #c62828; }

/* search + filters: one light panel */
.ev_f_panel {
  margin: 0 0 18px;
  padding: 14px;
  background: #e3f2fd;
  border: 1px solid #90caf9;
  border-radius: 16px;
  box-shadow: 0 3px 10px rgba(2, 136, 209, 0.12);
}
.ev_f_title { margin-bottom: 10px; font-weight: bold; color: #01579b; }
.ev_f_row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; }
.ev_f_row:last-child { margin-bottom: 0; }
.ev_f_select, .ev_f_input {
  box-sizing: border-box;
  min-height: 46px;
  padding: 8px 12px;
  font-size: 15pt;
  color: #2b2b2b;
  background: #fff;
  border: 2px solid #90caf9;
  border-radius: 12px;
}
.ev_f_select { width: 100%; }
.ev_f_input { flex: 1 1 200px; min-width: 0; }
.ev_f_btn, .ev_f_clear {
  min-height: 46px;
  padding: 8px 18px;
  font-size: 15pt;
  font-weight: bold;
  border: 0;
  border-radius: 999px;
  cursor: pointer;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.ev_f_btn { color: #2b2b2b; background: #ffd43b; box-shadow: 0 0 10px rgba(255, 212, 59, 0.5); }
.ev_f_btn:hover { background: #ffe066; }
.ev_f_clear { color: #fff; background: #78909c; }
.ev_f_checks { gap: 8px 14px; }
.ev_f_check {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 14px;
  font-weight: bold;
  color: #01579b;
  background: #fff;
  border: 1px solid #90caf9;
  border-radius: 999px;
  cursor: pointer;
}
.ev_f_check input[type="checkbox"] { width: 22px; height: 22px; accent-color: #01579b; }
.ev_f_check--admin { color: #a71d2a; background: #fdecea; border-color: #dc3545; }

@media (max-width: 699px) {
  .ev_top_hero { padding: 14px 12px; margin: 8px 0 12px; }
  .ev_top_hero_emoji { font-size: 26pt; }
  .ev_top_hero h1 { font-size: 19pt; }
  .ev_top_hero p { font-size: 13pt; }
  .ev_f_panel { padding: 12px; }
  .ev_f_btn { flex: 1 1 auto; }
}

/* Phones: use more of the screen's width on the Events page (the blue container's 20px side margins + 20px side padding,
   plus the table wrapper's own padding, left wide empty strips). */
@media (max-width: 699px) {
  .ev_page-container.clsBlueContainer { margin: 6px 0; padding-left: 8px; padding-right: 8px; border-radius: 16px; }
  .ev_page-container .ev_table-wrap { margin-left: 0; margin-right: 0; }
}

/* Events hero: the 🎉 sits to the LEFT of the title (one line) instead of stacked above it, so the header is shorter. */
.ev_top_hero_title { display: flex; align-items: center; justify-content: center; gap: 10px; }
.ev_top_hero_title .ev_top_hero_emoji { font-size: 28pt; line-height: 1; }
.ev_top_hero_title h1 { margin: 0; }
.ev_top_hero { padding-top: 14px; padding-bottom: 14px; }
@media (max-width: 699px) {
  .ev_top_hero_title .ev_top_hero_emoji { font-size: 22pt; }
  .ev_top_hero { padding-top: 10px; padding-bottom: 10px; }
}

/* Reminder chip: plain wrapping text with "interested in: [On]" kept together on one line (was a flex row that could push the toggle down). */
.ev_top_reminder { display: block; border-radius: 22px; }
.ev_top_nowrap { white-space: nowrap; }
.ev_top_reminder .ev_top_toggle { display: inline-block; margin-left: 4px; }
.ev_top_reminder small { display: block; margin-top: 2px; }

/* Admin-only "Show all events": events a regular member wouldn't see (parent question not answered with its
   trigger answer) get a red tint + bold red border. */
tr.ev_admin_hidden td { background: #f8d0d0 !important; }
tr.ev_admin_hidden { outline: 4px solid #c62828; outline-offset: -4px; }
.ev_f_check--allevents { color: #c62828; font-weight: bold; }

/* Sub-events: a card inside the parent's group, under the parent row. */
.ev_events-table tr.ev_subrow, .ev_events-table tr.ev_subrow:nth-child(even) { background: #eaf5fd; }
.ev_events-table tr.ev_subrow > td { padding: 0 14px 14px 14px; border-bottom: 3px solid #0288d1; }
.ev_subcard { margin-left: 28px; border: 2px solid #0288d1; border-left-width: 10px; border-radius: 12px; background: #fff; overflow: hidden; }
.ev_subcard_title { background: #0288d1; color: #fff; padding: 6px 12px; font-size: 0.9em; }
.ev_subitem { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding: 8px 12px; border-top: 1px solid #cfe6f7; font-size: 0.92em; }
.ev_subitem:first-of-type { border-top: none; }
.ev_subitem.rsvp-yes { background: #e6f4ea; }
.ev_subitem.rsvp-none { background: #fffbe0; }
.ev_subitem.rsvp-no { background: #ececec; }
.ev_subitem.ev_admin_hidden { background: #f8d0d0 !important; outline: 3px solid #c62828; outline-offset: -3px; }
.ev_subitem_when { flex: 0 0 auto; min-width: 150px; color: #444; font-weight: bold; }
.ev_subitem_name { flex: 1 1 200px; }
.ev_subcard_nested { margin: 0 0 8px 24px; }
.ev_kids_badge { display: inline-block; margin-top: 3px; padding: 1px 10px; border-radius: 999px; background: #0288d1; color: #fff;
                 font-size: 0.8em; font-weight: bold; }
@media (max-width: 600px) {
  .ev_events-table tr.ev_subrow { margin-top: -10px; }
  .ev_subcard { margin-left: 8px; }
}

/* Admin-only "➕ Add sub-event" links (events list + inside the sub-event card header). */
.ev_add_sub { display: inline-block; margin-top: 4px; padding: 1px 10px; border-radius: 999px; background: #fff0f0; color: #c62828 !important;
              border: 2px solid #c62828; font-size: 0.8em; font-weight: bold; text-decoration: none; }
.ev_add_sub--card { float: right; margin-top: 0; background: #fff; }

/* Event Camp Fire: the collapsible "More happening at this event" bar — its "N need your answer" badge pulses yellow even while closed. */
.rm_unanswered_badge { display: inline-block; margin-left: 8px; padding: 1px 12px; border-radius: 999px; background: #ffd43b; color: #5f4b00;
                       font-size: 0.8em; font-weight: bold; animation: rm_unanswered_pulse 1.6s ease-in-out infinite; }
@keyframes rm_unanswered_pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(255,212,59,.9); } 50% { box-shadow: 0 0 0 8px rgba(255,212,59,0); } }
@media (prefers-reduced-motion: reduce) { .rm_unanswered_badge { animation: none; } }
.rm_sub_events > summary .rm_sub_toggle::after { content: "▸ Show"; }
.rm_sub_events[open] > summary .rm_sub_toggle::after { content: "▾ Hide"; }

/* Events page, phone: the "✕ Clear" button next to Search is small (the Search button keeps its size). TO REVERT: delete this block. */
@media (max-width: 800px) {
  .ev_f_row .ev_f_clear { min-height: 0 !important; padding: 4px 12px !important; font-size: 11pt !important; flex: 0 0 auto; }
}
/* Mobile card layout for the Events table. Purely a @media rewrite of the
   SAME <td data-label="..."> markup events.html.erb already renders for
   desktop — nothing here touches the view, so the wide/laptop table look
   (events.css) is completely untouched. Only the max-width: 768px block
   below applies. */
@media (max-width: 768px) {
  /* .ev_table-wrap's own rule (events.css) zeroes its padding for the
     desktop rounded-corner table look — that left the cards below flush
     against the outer container's edge on mobile, plus the container
     itself butted up close to the browser's edge. Breathing room on both
     fronts: some padding back on the wrapper, and rely on .clsBlueContainer's
     normal site-wide 20px margin (unchanged) for the outer gap to the
     browser edge — this file just stops fighting it. */
  .ev_table-wrap {
    padding: 0 !important;
    background: transparent;
    box-shadow: none;
  }

  .ev_events-table thead { display: none; }

  .ev_events-table,
  .ev_events-table tbody {
    display: block;
    width: 100%;
  }

  /* Each row becomes a real card: a flex column so the cells inside can be
     visually reordered (event name first, then when/date, then the
     interested-count + RSVP action as a footer) regardless of the HTML's
     actual (desktop table) column order. */
  .ev_events-table tr {
    display: flex;
    flex-direction: column;
    width: 100%;
    box-sizing: border-box;
    margin-bottom: 14px;
    padding: 14px 16px;
    border: none;
    border-left: 5px solid #cfd8dc;
    border-radius: 14px;
    background-color: #fff;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.10);
  }

  /* Same status colors as the desktop row tints (events.css), just as a
     left-edge accent instead of a full-card wash — reads clearer on a small
     white card than a tinted background does. */
  .ev_events-table tr.rsvp-yes  { border-left-color: #43a047; }
  .ev_events-table tr.rsvp-no   { border-left-color: #9e9e9e; }
  .ev_events-table tr.rsvp-none { border-left-color: #f9a825; }
  .ev_events-table tr.past      { border-left-color: #bdbdbd; opacity: 0.72; }
  .ev_events-table tr.tomorrow:not(.rsvp-yes):not(.rsvp-no):not(.rsvp-none) {
    border-left-color: #185a9d;
  }

  .ev_events-table tr:nth-child(even) { background-color: #fff; } /* no zebra stripe on cards */

  .ev_events-table td {
    display: block;
    width: 100%;
    box-sizing: border-box;
    border: hidden;
    padding: 0;
  }

  /* Visual order: Event name/icon → Date/badges/countdown → interested
     count + notes → RSVP action. events.html.erb's actual column order
     (Date, Event, combined, RSVP) stays exactly as-is for desktop. */
  .ev_events-table td[data-label="Event"]      { order: 1; margin-bottom: 6px; }
  .ev_events-table td[data-label="Date"]       { order: 2; margin-bottom: 10px; }
  .ev_events-table td.ev_combined-field        { order: 3; }
  .ev_events-table td[data-label="Interested?"] { order: 4; margin-top: 10px; }

  /* The card's own layout above already makes each section's role obvious
     (name is big/bold, date reads like a date, ...) — the little blue
     "Event"/"Date" captions events.css normally prints via ::before were
     just noise here, not new information. */
  .ev_events-table td[data-label="Event"]::before,
  .ev_events-table td[data-label="Date"]::before {
    display: none;
  }

  .ev_events-table td[data-label="Event"] {
    font-size: 1.1em;
  }
  .ev_events-table td[data-label="Event"] .ev_event-name-link,
  .ev_events-table td[data-label="Event"] {
    font-weight: 700;
  }

  .ev_events-table td[data-label="Date"] {
    font-size: 0.92em;
    color: #555;
  }

  .ev_events-table td.ev_rsvp-cell {
    display: flex;
    align-items: center;
    gap: 6px;
    padding-top: 10px;
    border-top: 1px solid #eee;
  }

  .ev_events-table td.ev_rsvp-cell::before {
    display: inline;
    margin-bottom: 0;
  }

  .ev_combined-field {
    display: flex;
    flex-wrap: wrap;
    gap: 12px 20px;
    align-items: center;
    padding: 0 !important;
  }

  .ev_label {
    font-weight: bold;
    color: #1a5fb4;
    margin-right: 4px;
  }

  .ev_value { flex: 1; min-width: 80px; }

  .ev_value a.clsBlueLink {
    color: #1a5fb4;
    text-decoration: underline;
  }

  @media (max-width: 480px) {
    .ev_combined-field {
      flex-direction: column;
      align-items: flex-start;
      gap: 8px;
    }
    .ev_label { margin-right: 0; }
  }

  /* ---- Everything above/below the cards: page banner, filter bar, buttons,
     and the big "Know of something we're missing?" call-to-action boxes.
     Those use inline pt font sizes, hence the !important overrides. ---- */
  .ev_hero { margin: 8px 0 14px !important; padding: 16px 12px !important; }
  .ev_hero h1 { font-size: 18pt !important; }
  .ev_hero p { font-size: 12pt !important; }
  .ev_hero > div { font-size: 26pt !important; }

  .ev_filter-form { padding: 0 12px; }
  .ev_filter-input { flex: 1 1 140px; max-width: none; min-width: 0; box-sizing: border-box; }
  .ev_filter-select { flex: 1 1 auto; min-width: 0; max-width: 100%; }

  .ev_cta { margin: 16px 0 10px !important; padding: 20px 14px !important; }
  .ev_cta > div:first-child { font-size: 30pt !important; }
  .ev_cta h2 { font-size: 16pt !important; }
  .ev_cta p { font-size: 12pt !important; }
  .ev_cta .clsButton { font-size: 13pt !important; padding: 8px 16px !important; box-sizing: border-box; max-width: 100%; white-space: normal; }
}

/* Sub-events ("Also happening at …") on a phone: the card under an event uses the full width. The phone card styling (padding, edge
   bar, shadow) used to be applied to the sub-event row as well, stacked on its own margins — leaving a narrow strip. Here the row has
   no card chrome of its own, the sub-card has no side indent, and each item stacks (when / name / count / answer). TO REVERT: delete this block. */
@media (max-width: 768px) {
  .ev_events-table tr.ev_subrow {
    padding: 0 !important; border-left: none !important; box-shadow: none !important; background: transparent !important;
    margin-top: -8px !important; margin-bottom: 14px !important;
  }
  .ev_events-table tr.ev_subrow > td { padding: 0 !important; }
  .ev_subcard { margin-left: 0 !important; border-left-width: 6px; }
  .ev_subcard_nested { margin-left: 6px !important; }
  .ev_subitem { padding: 8px 10px; gap: 4px 10px; }
  .ev_subitem_when { flex: 1 1 100%; min-width: 0; }
  .ev_subitem_name { flex: 1 1 100%; }
}
/* app/assets/stylesheets/faqs.css */
.faqs-container {
  max-width: 800px;
  margin: 60px auto;
  padding: 40px;
  background: linear-gradient(135deg, #007bff, #00ddeb);
  border-radius: 12px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  text-align: center;
}

.faqs-container h1 {
  font-size: 36px;
  color: #fff;
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
  margin-bottom: 20px;
}

.faqs-container h2 {
  font-size: 24px;
  color: #fff;
  margin: 20px 0 10px;
  text-align: left;
}

.faqs-container p {
  font-size: 15pt;
  color: #f0f8ff;
  margin-bottom: 15px;
  text-align: left;
}

.actions {
  display: flex;
  justify-content: center;
  margin-top: 20px;
}


.clsFlash.notice {
  background-color: #d4edda;
  color: #28a745;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

.clsFlash.alert {
  background-color: #f8d7da;
  color: #dc3545;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

/* This page had zero mobile spacing at all — the same fixed 60px margin +
   40px padding + 36px heading that's fine on a laptop just crammed a phone
   screen. Same fun colors/gradient/emoji, just scaled down. */
@media (max-width: 600px) {
  .faqs-container {
    margin: 16px 12px;
    padding: 20px;
  }
  .faqs-container h1 {
    font-size: 26px;
    margin-bottom: 14px;
  }
  .faqs-container h2 {
    font-size: 19px;
    margin: 18px 0 8px;
  }
}
/* app/assets/stylesheets/feedback.css */
.feedback-container {
  max-width: 800px;
  margin: 60px auto;
  padding: 40px;
  background: linear-gradient(135deg, #007bff, #00ddeb);
  border-radius: 12px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  text-align: center;
}

.feedback-container h1 {
  font-size: 36px;
  color: #fff;
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
  margin-bottom: 20px;
}

.feedback-container p {
  font-size: 15pt;
  color: #f0f8ff;
  margin-bottom: 20px;
}

.field {
  margin-bottom: 20px;
}

.field { text-align: left; }

.feedback-container .field label {
  display: block;
  color: #ffe45c !important;   /* sunny yellow — not white or black, no box behind it; !important so no other label rule can turn it dark */
  font-weight: bold;
  font-size: 17pt;
  text-align: left;
  margin-bottom: 6px;
}

.field select,
.field textarea {
  width: 100%;
  padding: 10px;
  font-size: 15pt;
  border: 1px solid #fff;
  border-radius: 8px;
  box-sizing: border-box;
}

.field select option,
.field textarea::placeholder {
  color: #aaaaaa;
}

.field select:focus,
.field textarea:focus {
  outline: none;
  border-color: #ffeb3b;
  box-shadow: 0 0 5px rgba(255, 235, 59, 0.3);
}

.actions {
  display: flex;
  justify-content: center;
  gap: 20px;
}

.clsBlueButton {
  background-color: #ff6f61;
  color: white;
  padding: 12px 24px;
  border: none;
  border-radius: 8px;
  font-size: 15pt;
  cursor: pointer;
  transition: background-color 0.3s;
}

.clsBlueButton:hover {
  background-color: #e55a4e;
}

.clsCancelButton {
  background-color: #6c757d;
}

.clsCancelButton:hover {
  background-color: #5a6268;
}

.clsFlash.notice {
  background-color: #d4edda;
  color: #28a745;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

.clsFlash.alert {
  background-color: #f8d7da;
  color: #dc3545;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}
/* Phones (docs/design.md "Layout"): 10px left/right, 10px under the menu bar, 8px of space above the footer, and less padding
   inside so the title starts near the top of the box. */
@media (max-width: 800px) {
  .feedback-container {
    max-width: none;
    margin: 10px 10px 8px 10px;
    padding: 8px 10px 10px 10px;
  }
  .feedback-container h1 { margin-top: 0; }
}

/* The "You're reporting: …" note at the top of the form is left-aligned. */
.feedback-container p.rq_left { text-align: left; }

.f_site-footer {
  background-color: #007bff;
  color: #fff;
  padding: 2px 0;
  text-align: center;
  margin-top: 8px;
}

.f_footer-container {
  max-width: 800px;
  margin: 0 auto;
  padding: 0 20px;
}

.f_footer-container p {
  font-size: 15pt;
  margin: 6px 0;
}

.f_clsWordmark {
  font-family: 'Quicksand', sans-serif;
  font-weight: 700;
  font-size: 18pt;
}

.f_clsFooterLink {
  color: #ffeb3b; 
  text-decoration: none;
  margin: 0 10px;
}

.f_clsFooterLink:hover {
  color: #ffd700; /* Slightly darker yellow on hover */
  text-decoration: underline;
}

/* Phones: the footer text was sized for a laptop and took up a big chunk of the screen — scale it all down. */
@media (max-width: 699px) {
  .f_footer-container { padding: 0 12px; }
  .f_footer-container p { font-size: 10pt; margin: 4px 0; }
  .f_clsWordmark { font-size: 12pt; }
  .f_clsFooterLink { margin: 0 4px; }
  /* Copyright line: small enough to stay on one line on a phone (maintainer's request, 2026-10-07). */
  .f_footer-container p.f_copyright { font-size: min(8.5pt, 3vw); white-space: nowrap; text-align: center; }
}

/* ===== NAVY THEME (footer) — TO REVERT: delete everything from this comment down to "END NAVY THEME"
   (or restore ~/tribe_test_backups/app/assets/stylesheets/footer.css.bak_navytheme_*). ===== */
.f_site-footer {
  background: linear-gradient(180deg, #01579b, #0b2a5b);
}
/* ===== END NAVY THEME ===== */
.gs_guided-search-page {
  margin: 0 auto;
  padding: 20px;
  max-width: 1200px;
}
.s_clsGuidedDivSearchContainer {
  display: flex;
  flex-direction: column;
  gap: 20px;
}
.s_clsDivSearchMain {
  padding: 15px;
}
.s_clsDivListSavedSearches {
  padding: 15px;
  border-top: 1px solid #ccc;
}
.s_clsDivListSavedSearches h3 {
  margin-top: 0;
}
.s_clsDivListSavedSearches ul {
  list-style-type: none;
  padding: 0;
}
.s_clsDivListSavedSearches li {
  margin-bottom: 10px;
}
.s_clsDivListSavedSearches a {
  text-decoration: none;
 
}
.s_clsDivListSavedSearches a:hover {
  text-decoration: underline;
}
@media (min-width: 768px) {
  .s_clsGuidedDivSearchContainer {
    flex-direction: row;
  }
  .s_clsDivSearchMain {
    flex: 3;
    order: 1;
  }
  .s_clsDivListSavedSearches {
    flex: 1;
    order: 2;
    border-top: none;
    border-left: 1px solid #ccc;
  }
}
/* app/assets/stylesheets/home.css */
.home-container.clsBlueContainer {
  background: linear-gradient(135deg, #007bff, #00ddeb);
  border-radius: 12px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  text-align: center;
  padding: 20px;
}

.home-container h1 {
  font-size: 36px;
  color: #fff;
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
  margin-bottom: 20px;
}

.home-container h2 {
  font-size: 28px;
  color: #fff;
  margin-bottom: 20px;
}

.home-container h3 {
  font-size: 24px;
  color: #fff;
  margin-bottom: 15px;
  margin-top: 0;
}

.home-container h4 {
  font-size: 20px;
  color: #f0f8ff;
  margin-bottom: 10px;
}

.home-container p {
  font-size: 15pt;
  color: #f0f8ff;
  margin-bottom: 15px;
}

.hero-image {
  margin: 20px 0;
  border-radius: 10px;
  background: linear-gradient(45deg, #007bff, #00bcd4);
  height: 400px;
  color: #fff;
  line-height: 200px;
  font-size: 15pt;
}

.value-prop,
.features,
.social-proof {
  margin: 30px 0;
}

.feature-box {
  display: inline-block;
  width: 30%;
  margin: 10px;
  vertical-align: top;
  padding: 15px;
  background: rgba(255, 255, 255, 0.1);
  border-radius: 8px;
}

/* .clsBlueLink's default medium-blue text is nearly unreadable against this
   page's blue/cyan gradient background — same problem the h4/h3/p around it
   solve by going near-white. Matches that instead, with an underline so it
   still reads as a link rather than plain heading text. */
.home-container .clsBlueLink {
  color: #fff;
  text-decoration: underline;
}
.home-container .clsBlueLink:hover {
  color: #f0f8ff;
}

/* "A tad larger" than the site-wide .clsButton default, for this page's
   primary calls to action specifically. */
.home-cta-btn {
  height: 48px;
  padding: 12px 22px;
  font-size: 1.05em;
}


.social-proof em {
  font-style: italic;
  color: #e0e7ff;
}


@media (max-width: 800px) {
  .home-container h1 {
    font-size: 26px;
  }

  .home-container h2 {
    font-size: 24px;
  }

  .home-container h3 {
    font-size: 22px;
  }

  .home-container h4 {
    font-size: 15pt;
  }

  .home-container p {
    font-size: 15pt;
  }

  .hero-image {
    height: 150px;
  }

  .feature-box {
    width: auto;
  }
}

/* ===== Home page "spruce up" (2026-10-04) — docs/design.md "Favorite style" + house palette =====
   New hp_ classes only; the older classes above stay because login/signup still use them. Text >= 15pt. */
.hp_page { max-width: min(1600px, 98%); margin: 16px auto 24px; padding: 0 2px; box-sizing: border-box; text-align: center; }
.hp_page h1, .hp_page h2, .hp_page h3, .hp_page h4 { margin-top: 0; }
.hp_page p { font-size: 15pt; line-height: 1.5; }

.hp_big_emoji { font-size: 44pt; line-height: 1.1; margin-bottom: 4px; }

/* Hero: dark house blue, top dark -> bottom brighter, soft glow. */
.hp_hero {
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 55%, #0288d1 100%);
  border-radius: 16px; box-shadow: 0 6px 18px rgba(1, 87, 155, 0.35);
  padding: 28px 22px 30px; color: #fff; margin-bottom: 22px;
}
.hp_hero h1 { font-size: 27pt; color: #fff; text-shadow: 0 2px 6px rgba(0,0,0,0.35); margin-bottom: 10px; }
.hp_hero h2 { font-size: 17pt; font-weight: normal; color: #e3f2fd; margin-bottom: 18px; }
.hp_hero_image {
  display: block; width: 100%; max-width: 760px; height: auto; max-height: 340px; object-fit: cover;
  margin: 0 auto 22px; border-radius: 16px; border: 3px solid rgba(255, 224, 102, 0.85);
  box-shadow: 0 0 22px rgba(255, 224, 102, 0.35), 0 6px 14px rgba(0,0,0,0.35);
}
/* Hero photo slideshow: fixed 16:9 frame, slides slide in from the right. No manual controls. */
.hp_slideshow {
  position: relative; overflow: hidden; width: 100%; max-width: 760px; aspect-ratio: 16 / 9;
  margin: 0 auto 22px; border-radius: 16px; border: 3px solid rgba(255, 224, 102, 0.85);
  box-shadow: 0 0 22px rgba(255, 224, 102, 0.35), 0 6px 14px rgba(0,0,0,0.35);
}
.hp_slide {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  transition: transform 1s ease-in-out;
}
/* long-pressing the photo on a phone pauses it, so suppress the browser's image menu / text selection */
.hp_slideshow { -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; }
.hp_slide--current  { transform: translateX(0); }
.hp_slide--incoming { transform: translateX(100%); }
.hp_slide--outgoing { transform: translateX(-100%); }
.hp_hero .hp_big_emoji { display: none; }   /* the h1 already carries the globe emojis */
/* Join + Log in buttons side by side (wrap on narrow phones). */
.hp_cta_row { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 12px; }
.hp_cta_row form { margin: 0; }
.hp_login_btn {
  display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;
  background: #fff !important; color: #01579b !important; font-weight: bold; font-size: 15pt;
  height: auto !important; min-height: 52px; padding: 10px 30px !important; margin: 6px 0 0 !important;
  border-radius: 25px; border: 2px solid #ffe066; text-decoration: none; box-shadow: 0 3px 8px rgba(0,0,0,0.3);
}
.hp_login_btn:hover { background: #e3f2fd !important; transform: scale(1.05); }
/* Phones: keep both buttons on one line by shrinking them to share the width. */
@media (max-width: 600px) {
  .hp_cta_row { flex-wrap: nowrap; gap: 8px; }
  .hp_cta_row form { flex: 1 1 0; min-width: 0; }
  .hp_cta_row .hp_glow_btn, .hp_cta_row .hp_login_btn { width: 100%; font-size: 12pt; padding: 10px 8px !important; white-space: nowrap; }
  .hp_cta_row .hp_login_btn { flex: 1 1 0; min-width: 0; width: auto; }
}
.hp_hero_sub { color: #e3f2fd; margin: 14px 0 0; }
.hp_hero_link { color: #ffe066; font-weight: bold; text-decoration: underline; white-space: nowrap; }

/* Glowing yellow pill CTA. */
.hp_glow_btn {
  background: #ffd43b !important; color: #1a2a3a !important; font-weight: bold; font-size: 15pt;
  height: auto !important; min-height: 52px; padding: 10px 30px !important; margin: 6px auto 0 !important;
  border-radius: 25px; box-shadow: 0 0 14px rgba(255, 212, 59, 0.65), 0 3px 8px rgba(0,0,0,0.3);
  animation: hp_glow 2.6s ease-in-out infinite;
}
.hp_glow_btn:hover { background: #ffe066 !important; transform: scale(1.05); }
@keyframes hp_glow {
  0%, 100% { box-shadow: 0 0 10px rgba(255, 212, 59, 0.45), 0 3px 8px rgba(0,0,0,0.3); }
  50%      { box-shadow: 0 0 24px rgba(255, 212, 59, 0.95), 0 3px 8px rgba(0,0,0,0.3); }
}
@media (prefers-reduced-motion: reduce) { .hp_glow_btn { animation: none; } .hp_glow_btn:hover { transform: none; } }

/* Events promo: a second dark card, fun & warm. */
.hp_events {
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 100%);
  border-radius: 16px; box-shadow: 0 3px 8px rgba(0,0,0,0.3); color: #fff;
  padding: 20px 18px 24px; margin-bottom: 22px;
}
.hp_events h3 { font-size: 19pt; color: #fff; margin-bottom: 12px; }

/* Light cards for readable copy. */
.hp_card {
  background: #fff; border-radius: 16px; box-shadow: 0 3px 10px rgba(0,0,0,0.10);
  border: 1px solid rgba(0, 123, 255, 0.18); padding: 22px 24px; margin-bottom: 22px; color: #2b2b2b;
}
.hp_card h3 { font-size: 19pt; color: #01579b; margin-bottom: 10px; }
.hp_card p { color: #2b2b2b; margin: 0 0 10px; }
.hp_value { border-left: 8px solid #0288d1; text-align: left; }
.hp_proof { position: relative; background: linear-gradient(160deg, #fff8e1, #fff); border-color: rgba(255, 212, 59, 0.6); }
.hp_quote_mark { font-size: 54pt; line-height: 0.6; color: #ffd43b; font-family: Georgia, serif; margin-bottom: 6px; }

/* What you can do: three lifted cards. */
.hp_section_title { font-size: 20pt; color: #01579b; margin-bottom: 14px; }
.hp_features { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; margin-bottom: 22px; }
.hp_feature {
  flex: 1 1 280px; max-width: 340px; background: linear-gradient(180deg, #f3faff, #e3f2fd);
  border: 2px solid rgba(2, 136, 209, 0.25); border-radius: 16px; padding: 20px 18px;
  box-shadow: 0 3px 10px rgba(2, 136, 209, 0.12); cursor: default;
}
.hp_feature_emoji { font-size: 38pt; line-height: 1.1; margin-bottom: 6px; }
.hp_feature h4 { font-size: 16pt; margin-bottom: 8px; color: #01579b; }
.hp_feature p { color: #2b2b2b; margin: 0; }
.hp_link { color: #0a58ca; font-weight: bold; text-decoration: none; }
.hp_link:hover { text-decoration: underline; }

/* Bottom calls to action. */
.hp_ctas { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; }
.hp_cta {
  flex: 1 1 280px; max-width: 360px; background: linear-gradient(180deg, #0b2a5b, #01579b);
  border-radius: 16px; box-shadow: 0 3px 8px rgba(0,0,0,0.3); padding: 20px 18px 22px; color: #fff;
}
.hp_cta p { color: #fff; margin: 0 0 12px; }

@media (max-width: 800px) {
  .hp_hero h1 { font-size: 21pt; }
  .hp_hero h2 { font-size: 15pt; }
  .hp_big_emoji { font-size: 36pt; }
  .hp_feature, .hp_cta { max-width: none; }
}

.hp_members_note { color: #01579b; font-weight: bold; margin: 0 0 22px; }

/* Online-first card: campfire-style dark card with a warm glow. */
.hp_online {
  background: linear-gradient(180deg, #2b1b3d 0%, #5a2d0c 55%, #c2571a 100%);
  border-radius: 16px; box-shadow: 0 3px 8px rgba(0,0,0,0.3); color: #fff;
  padding: 22px 22px 18px; margin-bottom: 22px;
}
.hp_online h3 { font-size: 19pt; color: #fff; margin-bottom: 12px; }
.hp_online p { color: #fff; margin: 0 0 12px; }
.hp_online strong { color: #ffe066; }

.hp_value_list { list-style: none; margin: 0 0 12px; padding: 0; }
.hp_value_list li { font-size: 15pt; line-height: 1.5; color: #2b2b2b; padding: 6px 0 6px 2.2em; position: relative; }
.hp_value_list li span { position: absolute; left: 0; top: 6px; font-size: 16pt; }
.hp_value_list strong { color: #01579b; }

.hp_events p { color: #fff; margin: 0 0 12px; max-width: 760px; margin-left: auto; margin-right: auto; }

/* Events promo: short scannable steps instead of paragraphs. */
.hp_events .hp_events_intro { font-size: 14pt; margin-bottom: 16px; }
.hp_events_steps { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-bottom: 18px; }
.hp_events_step {
  flex: 1 1 200px; max-width: 240px; background: rgba(255,255,255,0.12);
  border-radius: 12px; padding: 12px 10px; display: flex; flex-direction: column; gap: 4px;
}
.hp_events_icon { font-size: 26pt; line-height: 1.1; }
.hp_events_step strong { font-size: 13pt; color: #fff; }

/* Phones: less side white space — tighter padding inside the home page cards. */
@media (max-width: 800px) {
  .hp_page { max-width: none; padding: 0 10px; }
  .hp_hero, .hp_events, .hp_card, .hp_online { padding-left: 10px; padding-right: 10px; }
  .hp_feature, .hp_cta { padding-left: 10px; padding-right: 10px; }
  /* The three Events step cards were capped at 240px, so on a phone they sat narrow in the middle of the blue box. */
  .hp_events_step { max-width: none; flex-basis: 100%; }
}

/* Phones: in "Check out Events!", put the big 🎉 on the same line, just left of the heading, to save vertical space. */
@media (max-width: 600px) {
  .hp_events > .hp_big_emoji { display: inline-block; vertical-align: middle; font-size: 24pt; margin: 0 6px 0 0; }
  .hp_events > h3 { display: inline-block; vertical-align: middle; margin-bottom: 12px; }
}

/* Phones: in "What You Can Do", put each card's emoji on the same line as its title, just before it. */
@media (max-width: 600px) {
  .hp_feature { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; }
  .hp_feature_emoji { flex: 0 0 auto; font-size: 24pt; line-height: 1; margin: 0 8px 0 0; }
  .hp_feature h4 { flex: 0 1 auto; margin: 0; }
  .hp_feature p { flex: 0 0 100%; margin-top: 8px; }
}
/* "Help a friend find their tribe" invitation page — playful cards on the site's navy / yellow / green palette (docs/design.md). */
.inv_page { max-width: 46rem; margin: 0 auto; padding: 1rem 1rem .5rem; font-size: 1.05rem; color: #1b2733; }

.inv_hero {
  text-align: center; color: #fff; border-radius: 22px; padding: 1.6rem 1.2rem 1.5rem;
  background: linear-gradient(135deg, #0B2A5B 0%, #1d5fb5 55%, #ff9a3c 130%);
  box-shadow: 0 6px 18px rgba(11, 42, 91, .28);
}
.inv_hero_emoji { font-size: 2.6rem; letter-spacing: .3rem; animation: inv_flicker 2.4s ease-in-out infinite; }
.inv_hero h1 { margin: .3rem 0 .4rem; font-size: 2.2rem; color: #FFE066; font-family: inherit; }
.inv_hero_sub em { color: #FFE066; font-style: normal; font-weight: bold; }
.inv_hero_sub { margin: 0 auto; max-width: 34rem; font-size: 1.15rem; line-height: 1.45; color: #eaf3ff; }
@keyframes inv_flicker { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.08) rotate(-1deg); } }

.inv_card {
  background: #fff; border-radius: 18px; padding: 1.2rem 1.3rem; margin-top: 1.1rem;
  box-shadow: 0 3px 12px rgba(0, 0, 0, .12); border: 2px solid #e6eef9;
}
.inv_ways_title { margin: 1.4rem 0 .1rem; font-size: 1.45rem; color: #0B2A5B; text-align: center; }
.inv_ways_sub { margin: 0 0 .2rem; text-align: center; color: #5b6b7b; }
.inv_card h2 { margin: 0 0 .2rem; font-size: 1.35rem; color: #0B2A5B; }
.inv_help { margin: 0 0 .8rem; color: #5b6b7b; font-size: .98rem; }

.inv_why { display: grid; grid-template-columns: repeat(3, 1fr); gap: .8rem; text-align: center; background: #FFF8DC; border-color: #ffe08a; }
.inv_why_item span { display: block; font-size: 2rem; }
.inv_why_item strong { display: block; color: #0B2A5B; margin: .15rem 0; }
.inv_why_item small { color: #5b6b7b; line-height: 1.3; display: block; }

.inv_link_row { display: flex; gap: .6rem; flex-wrap: wrap; }
.inv_link_row input {
  flex: 1 1 14rem; min-width: 0; padding: .7rem .8rem; font-size: 1rem; border: 2px solid #c9d8ee; border-radius: 12px; background: #f6f9fe;
}

.inv_chips { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: .7rem; }
.inv_chip {
  border: 2px solid #c9d8ee; background: #f6f9fe; color: #0B2A5B; border-radius: 999px; padding: .45rem .9rem; font-size: 1rem; cursor: pointer;
}
.inv_chip.active { background: #FFD43B; border-color: #e0b400; font-weight: bold; }
.inv_card textarea {
  width: 100%; box-sizing: border-box; padding: .8rem; font-size: 1rem; line-height: 1.4; border: 2px solid #c9d8ee; border-radius: 12px; resize: vertical; font-family: inherit;
}

.inv_actions { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: .8rem; }
.inv_btn {
  display: inline-block; border: none; border-radius: 999px; padding: .65rem 1.15rem; font-size: 1rem; font-weight: bold; color: #fff;
  text-decoration: none; cursor: pointer; transition: transform .12s ease, box-shadow .12s ease; box-shadow: 0 2px 6px rgba(0, 0, 0, .18);
}
.inv_btn:hover { transform: translateY(-2px); box-shadow: 0 5px 12px rgba(0, 0, 0, .22); color: #fff; }
.inv_btn[hidden] { display: none; }
.inv_btn_blue { background: #1d5fb5; }
.inv_btn_green { background: #2e7d32; }
.inv_btn_sms { background: #6a1b9a; }
.inv_btn_whatsapp { background: #1fa855; }
.inv_btn_mail { background: #d9822b; }
.inv_btn.inv_done { background: #2e7d32; }

.inv_qr_card { text-align: center; }
.inv_qr { display: inline-block; max-width: 100%; box-sizing: border-box; background: #fff; padding: 12px; border-radius: 16px; border: 3px solid #FFD43B; line-height: 0; }
.inv_qr img, .inv_qr canvas { max-width: 100%; height: auto !important; }

.inv_foot { text-align: center; margin-top: .9rem; margin-bottom: 0; font-weight: bold; color: #0B2A5B; }

@media (max-width: 600px) {
  .inv_page { padding: .6rem .6rem .5rem; font-size: 1rem; }
  .inv_hero { padding: 1.2rem .9rem; border-radius: 18px; }
  .inv_hero_emoji { font-size: 2.1rem; letter-spacing: .15rem; }
  .inv_hero_sub { font-size: 1.05rem; }
  .inv_card { padding: 1rem .95rem; }
  .inv_link_row input { flex-basis: 100%; }
  .inv_chip { flex: 1 1 calc(50% - .5rem); text-align: center; }
  .inv_hero h1 { font-size: 1.7rem; line-height: 1.15; }
  .inv_why { grid-template-columns: 1fr; text-align: left; }
  .inv_why_item span { display: inline; margin-right: .4rem; }
  .inv_why_item strong { display: inline; }   /* emoji and title on the same line */
  .inv_btn { flex: 1 1 100%; text-align: center; }
}
/* "Your Answered Questions" (limited_useranswers) — a search card, then answers as a table on wide screens and as
   stacked cards on a phone. Readable sizes for an older audience (docs/design.md). */

.clsAnswersContainer {
  margin: 0 auto;
  padding: 20px;
  text-align: center;
}

.clsAnswersContainer h1 { margin-top: 6px; }

/* Search: one white card with a roomy field and big buttons */
.lu_search_card {
  max-width: 760px;
  margin: 14px auto 8px;
  padding: 18px 20px;
  background: #fff;
  border: 2px solid #b3d9f5;
  border-radius: 16px;
  box-shadow: 0 3px 10px rgba(2, 136, 209, 0.12);
  text-align: left;
}
.search-form .field { margin-bottom: 15px; }
.lu_search_card label { display: block; font-weight: bold; font-size: 1.1em; color: #01579b; margin-bottom: 6px; }
.lu_search_input {
  width: 100%;
  box-sizing: border-box;
  padding: 12px 14px;
  font-size: 1.05em;
  border: 2px solid #b3d9f5;
  border-radius: 12px;
  background: #f7fbff;
}
.lu_search_input:focus { outline: none; border-color: #0288d1; box-shadow: 0 0 0 3px rgba(2, 136, 209, 0.2); background: #fff; }
.lu_search_buttons { display: flex; flex-wrap: wrap; gap: 10px; }

.lu_summary { max-width: 760px; margin: 12px auto; color: #37474f; line-height: 1.5; }
.lu_summary code { background: #fff; border: 1px solid #b3d9f5; border-radius: 6px; padding: 1px 6px; }
.lu_count { display: inline-block; background: #0288d1; color: #fff; border-radius: 999px; padding: 0 12px; }

/* Results table (wide screens) */
.clsAnswersTable {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0 8px;
  margin-top: 12px;
  user-select: none; /* Prevent text selection */
}
.clsAnswersTable thead th {
  background: #0288d1;
  color: #fff;
  padding: 10px 12px;
  text-align: left;
}
.clsAnswersTable thead th:first-child { border-radius: 12px 0 0 12px; }
.clsAnswersTable thead th:last-child  { border-radius: 0 12px 12px 0; }
.clsAnswersTable td {
  background: #fff;
  border-top: 1px solid #d7ecfc;
  border-bottom: 1px solid #d7ecfc;
  padding: 12px;
  text-align: left;
  vertical-align: middle;
}
.clsAnswersTable td:first-child { border-left: 1px solid #d7ecfc; border-radius: 12px 0 0 12px; }
.clsAnswersTable td:last-child  { border-right: 1px solid #d7ecfc; border-radius: 0 12px 12px 0; }
.clsAnswersTable tbody tr:hover td { background: #f0f8ff; }
.lu_q { font-weight: bold; color: #14213d; line-height: 1.4; }

.lu_cat {
  display: inline-block; padding: 2px 12px; border-radius: 999px;
  background: #e3f2fd; border: 1px solid #90caf9; color: #01579b; font-size: 0.92em; font-weight: bold;
}
.lu_pill {
  display: inline-block; padding: 2px 14px; border-radius: 999px; font-weight: bold;
}
.lu_pill_yes   { background: #dcefe0; color: #1a7f37; border: 1px solid #1a7f37; }
.lu_pill_no    { background: #fde8e8; color: #b71c1c; border: 1px solid #b71c1c; }
.lu_pill_other { background: #e3f2fd; color: #01579b; border: 1px solid #0288d1; }

.clsNoAnswer { font-style: italic; color: #6c757d; }
.lu_empty { max-width: 560px; margin: 18px auto; padding: 18px; background: #fff; border: 2px dashed #b3d9f5; border-radius: 16px; }
.lu_empty_icon { font-size: 2.4em; }

.clsEmoji { font-size: 1.2em; }

/* Search / Clear / Answer More Questions felt squished at the base .clsButton
   size — give them a bit more room. Combined with .clsButton for higher
   specificity: application.css's own .clsButton rule compiles in last
   (require_self runs after require_tree) and would otherwise win the
   height/padding/font-size tie at equal specificity. */
.clsButton.lu_clsBigButton {
  height: 48px;
  padding: 10px 24px;
  font-size: 1.1em;
}

/* Phone: each answer becomes its own card, label on the left, value on the right */
@media (max-width: 700px) {
  .clsAnswersContainer { padding: 10px; }
  .lu_search_card { padding: 14px; }
  .clsButton.lu_clsBigButton { flex: 1 1 140px; text-align: center; }

  .lu_table, .lu_table tbody, .lu_table tr, .lu_table td { display: block; width: 100%; box-sizing: border-box; }
  .lu_table thead { display: none; }
  .lu_table { border-spacing: 0; }
  .lu_table tr {
    background: #fff; border: 1px solid #d7ecfc; border-radius: 14px; margin: 0 0 12px;
    box-shadow: 0 2px 8px rgba(2, 136, 209, 0.10); padding: 6px 0;
  }
  .clsAnswersTable td, .clsAnswersTable td:first-child, .clsAnswersTable td:last-child {
    border: none; border-radius: 0; background: transparent; padding: 6px 14px; text-align: left;
  }
  .clsAnswersTable tbody tr:hover td { background: transparent; }
  .lu_table td[data-label]:not([data-label=""])::before {
    content: attr(data-label); display: block; font-size: 0.8em; font-weight: bold; text-transform: uppercase;
    letter-spacing: 0.04em; color: #607d8b; margin-bottom: 2px;
  }
  .lu_table td.clsActions { padding-top: 8px; }
  .lu_table td.clsActions .clsButton { width: 100%; text-align: center; box-sizing: border-box; }
}

/* "Answer More Questions": a warm sunrise button (not the usual blue) with a slow, gentle glow to draw the eye. */
.clsButton.lu_more {
  background: linear-gradient(135deg, #ff8f00, #ffd43b);
  color: #0b2a5b;
  font-weight: bold;
  border: none;
  text-decoration: none;
  box-shadow: 0 3px 10px rgba(255, 143, 0, 0.45);
  animation: lu_glow 2.6s ease-in-out infinite;
}
.clsButton.lu_more:hover { background: linear-gradient(135deg, #fb8c00, #ffca28); transform: translateY(-1px); }
@keyframes lu_glow {
  0%, 100% { box-shadow: 0 3px 10px rgba(255, 143, 0, 0.40); }
  50%      { box-shadow: 0 3px 20px rgba(255, 143, 0, 0.85); }
}
@media (prefers-reduced-motion: reduce) { .clsButton.lu_more { animation: none; } }

/* Answer More Questions + Suggest a question: one line when they fit, stacked on a narrow screen */
.lu_more_row { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 14px; margin: 16px 0 6px; }
@media (max-width: 700px) { .lu_more_row .clsButton { flex: 1 1 100%; text-align: center; } }
.cursor-pointer { cursor: pointer; }
.card:hover { border-color: var(--primary); transition: border-color 0.2s; }
.form-group { margin-bottom: 1.5rem; }
.btn-block { display: block; width: 100%; }
.shadow-sm { box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
.alert { padding: 1rem; border-radius: 0.5rem; margin-bottom: 1rem; }
.alert-danger { background: #ffebee; color: #c62828; border: 1px solid #ef9a9a; }
.text-center { text-align: center; }
.text-secondary { color: #666; }
.text-danger { color: #d32f2f; }
.mt-1 { margin-top: 0.25rem; }
.mt-3 { margin-top: 0.75rem; }
.mt-5 { margin-top: 1.25rem; }
.mb-4 { margin-bottom: 1rem; }
.py-3 { padding: 0.75rem 0; }
.p-4 { padding: 1.5rem; }
.w-100 { width: 100%; }
/* FROM CODE */
.li_day-sky-login.clsBlueContainer {
  margin: 30px auto;
  padding: 20px;
  background: linear-gradient(135deg, #007bff, #00ddeb);
  border-radius: 12px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  text-align: center;
  max-width: 500px;
}

  .li_clsSignupPrompt {
    font-size: 15pt !important;
    margin-top: 15px;
  }

.li_-login h1 {
  font-size: 36px;
  color: #fff;
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
  margin-bottom: 20px;
}

.li_day-sky-login h2 {
  font-size: 28px;
  color: #fff;
  margin-bottom: 20px;
}

.li_day-sky-login p {
  font-size: 15pt;
  color: #f0f8ff;
  margin-bottom: 15px;
}

.li_day-sky-login.clsBlueContainer,
.li_sign-up-page.clsBlueContainer {
  margin: 30px auto;
  padding: 20px;
  background: linear-gradient(135deg, #007bff, #00ddeb);
  border-radius: 12px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  text-align: center;
  max-width: 500px;
}

.li_day-sky-login h1,
.li_sign-up-page h1 {
  font-size: 36px;
  color: #fff;
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
  margin-bottom: 20px;
}

.li_day-sky-login h2,
.li_sign-up-page h2 {
  font-size: 28px;
  color: #fff;
  margin-bottom: 20px;
}

.li_day-sky-login p,
.li_sign-up-page p {
  font-size: 15pt;
  color: #f0f8ff;
  margin-bottom: 15px;
}


.li_action-box {
  margin: 20px 0;
  padding: 20px;
  background: rgba(255, 255, 255, 0.15);
  border: 2px solid #fff;
  border-radius: 10px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.li_action-box p {
  font-size: 15pt;
  color: #fff;
  margin-bottom: 15px;
}
.li_action-box.li_clsSkyGlow {
  margin: 20px 0;
  padding: 20px;
  background: rgba(255, 255, 255, 0.15);
  border: 2px solid #fff;
  border-radius: 10px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  transition: box-shadow 0.3s ease-in-out;
}

.li_action-box.li_clsSkyGlow:hover {
  box-shadow: 0 0 15px rgba(255, 255, 255, 0.5);
}

.li_clsField {
  margin: 15px 0;
  text-align: left;
}

.li_clsInputGlow input {
  border: 2px solid #deb887;
  border-radius: 5px;
  padding: 10px;
  width: 100%;
  box-sizing: border-box;
  transition: border-color 0.3s, box-shadow 0.3s;
}

.li_clsInputGlow input:focus {
  border-color: #f4a460;
  box-shadow: 0 0 10px rgba(244, 164, 96, 0.5);
  outline: none;
}

.li_clsLabel {
  color: #f0d804;
}

.li_clsVibrantLabel {
  color: #FEBE10;
  font-weight: bold;
  text-align: left;
}

.clsPulseButton {
  background: #4682b4;
  border: none;
  padding: 12px 24px;
  font-size: 1.1em;
  border-radius: 25px;
  cursor: pointer;
  transition: transform 0.2s, background 0.2s;
  color: white;
  animation: pulse 1.5s infinite;
}

.clsPulseButton:hover {
  background: #f4a460;
  transform: scale(1.05);
}

@keyframes pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.1); }
  100% { transform: scale(1); }
}

.li_clsSignupPrompt {
  margin-top: 20px;
  color: #f0f8ff;
  font-size: 15pt;
}

.clsDesertLink {
  color: #1a3c5e; /* Navy blue for readability, matching li_clsVibrantLabel */
  text-decoration: none;
  font-weight: bold;
  position: relative;
}

.clsDesertLink:hover {
  color: #deb887; /* Burlywood tan on hover */
}

.clsDesertLink:hover::after {
  content: "✨";
  position: absolute;
  right: -20px;
  animation: sparkle 0.5s;
}

@keyframes sparkle {
  0% { opacity: 0; transform: translateY(0); }
  100% { opacity: 1; transform: translateY(-5px); }
}

.clsAlert {
  color: #ff4d4d;
  background: rgba(255, 255, 255, 0.2);
  padding: 10px;
  border-radius: 5px;
  margin-bottom: 20px;
}

.clsAlert ul {
  list-style: none;
  padding: 0;
}

.clsAlert li {
  font-size: 15pt;
  margin: 5px 0;
}

@media (max-width: 580px) {
  .clsPulseButton {
    min-width: 240px;
    padding: 14px 20px;
    font-size: 1.2em;
  }

  .loginButton {
    margin: 0 !important;
    font-size: 15pt !important;
  }
}
@media (max-width: 600px) {
  .li_day-sky-login h1 {
    font-size: 15pt;     /* Much smaller than 36px */
    margin: 15px 0 10px;
  }
  


  .li_day-sky-login h2 {
    font-size: 15pt;     /* Much smaller than 28px */
    margin: 10px 0;
  }
  
  .li_day-sky-login p,
  .li_action-box p,
  .li_clsSignupPrompt {
    font-size: 15pt;       /* Down from 18px */
    margin: 8px 0;
    line-height: 1.4;
  }
  
  .li_action-box {
    padding: 15px;        /* Reduce padding to save vertical space */
    margin: 15px 0;
  }
  
  .li_day-sky-login.clsBlueContainer {
    margin: 20px auto;    /* Less top/bottom margin */
    padding: 10px;        /* Less internal padding */
    max-width: 90%;       /* Slightly wider on small screens for better fit */
  }
  
  .clsPulseButton {
    font-size: 1.1em;
    padding: 12px 20px;
  }
}


/* ── Login page (lg_*) — phone-first "camp fire" card. Scoped to .lg_page so the shared li_* styles above
   (still used by sign-up etc.) are untouched. All text ≥ 15pt. ───────────────────────────────────────── */
.lg_page {
  display: flex;
  justify-content: center;
  padding: 24px 12px 32px;
}

.lg_card {
  width: min(460px, 100%);
  box-sizing: border-box;
  padding: 28px 20px 24px;
  text-align: center;
  color: #fff;
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 70%, #0288d1 100%);
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3), 0 0 28px rgba(255, 224, 102, 0.18);
}

.lg_emoji { font-size: 44pt; line-height: 1; margin-bottom: 6px; }

.lg_title {
  margin: 4px 0 6px;
  font-size: 22pt;
  line-height: 1.15;
  color: #fff;
}

.lg_card .lg_tagline {
  margin: 0 0 8px;
  font-size: 15pt;
  font-weight: bold;
  color: #ffe066;
}

.lg_card .lg_sub {
  margin: 0 0 18px;
  font-size: 15pt;
  line-height: 1.4;
  color: #e3f2fd;
}

/* readable fields sit on a light panel inside the dark card */
.lg_panel {
  background: #e3f2fd;
  border-radius: 14px;
  padding: 14px 14px 6px;
  text-align: left;
  margin-bottom: 18px;
}

.lg_field { margin-bottom: 14px; }

.lg_label {
  display: block;
  margin-bottom: 6px;
  font-size: 15pt;
  font-weight: bold;
  color: #01579b;
}

.lg_input {
  display: block;
  width: 100%;
  box-sizing: border-box;
  min-height: 52px;
  padding: 10px 14px;
  font-size: 15pt;
  color: #2b2b2b;
  background: #fff;
  border: 2px solid #90caf9;
  border-radius: 12px;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.lg_input:focus {
  outline: none;
  border-color: #ffd43b;
  box-shadow: 0 0 0 4px rgba(255, 212, 59, 0.45);
}

/* one glowing yellow CTA, full width = easy thumb target */
.lg_button {
  display: block;
  width: 100%;
  box-sizing: border-box;
  min-height: 56px;
  padding: 12px 18px;
  font-size: 15pt;
  font-weight: bold;
  color: #2b2b2b;
  background: #ffd43b;
  border: 0;
  border-radius: 999px;
  cursor: pointer;
  box-shadow: 0 0 14px rgba(255, 212, 59, 0.6);
  animation: lg_glow 2s ease-in-out infinite;
}

.lg_button:hover, .lg_button:active { background: #ffe066; }

@keyframes lg_glow {
  0%, 100% { box-shadow: 0 0 10px rgba(255, 212, 59, 0.45); }
  50%      { box-shadow: 0 0 22px rgba(255, 212, 59, 0.9); }
}

.lg_links { margin-top: 18px; }

.lg_card .lg_links p {
  margin: 12px 0 0;
  font-size: 15pt;
  line-height: 1.5;
  color: #e3f2fd;
}

.lg_link {
  display: inline-block;
  margin-top: 4px;
  padding: 10px 18px;
  font-size: 15pt;
  font-weight: bold;
  color: #ffe066;
  text-decoration: none;
  border: 2px solid rgba(255, 224, 102, 0.7);
  border-radius: 999px;
}

.lg_link:hover { background: rgba(255, 224, 102, 0.15); color: #fff3b0; }

@media (max-width: 480px) {
  .lg_page { padding: 12px 8px 24px; }
  .lg_card { padding: 22px 14px 20px; }
  .lg_title { font-size: 20pt; }
}

@media (prefers-reduced-motion: reduce) {
  .lg_button { animation: none; }
}

/* ── Sign-up extras (same lg_* look as the login page) ─────────────────────────────────────────────────── */
.lg_alert {
  margin-bottom: 14px;
  padding: 10px 14px;
  text-align: left;
  background: #fff3cd;
  color: #856404;
  border: 1px solid #ffeeba;
  border-radius: 12px;
}
.lg_alert ul { margin: 0; padding-left: 22px; }
.lg_alert li { font-size: 15pt; margin: 4px 0; }

.lg_captcha { display: flex; justify-content: center; margin-bottom: 14px; overflow-x: auto; }

.lg_card .lg_note { background: #dde3ea; padding: 10px 14px; }
.lg_card .lg_note p { margin: 0; font-size: 15pt; line-height: 1.45; color: #2b2b2b; }

.lg_terms { padding: 10px 14px; }
.lg_check { display: flex; align-items: flex-start; gap: 12px; margin: 0; font-size: 15pt; line-height: 1.4; color: #2b2b2b; }
.lg_check input[type="checkbox"] { flex: 0 0 auto; width: 28px; height: 28px; margin: 2px 0 0; accent-color: #01579b; }
.lg_check a { color: #0a58ca; font-weight: bold; }
/* File: app/assets/stylesheets/match_quest.css */

.match-quest-container {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
}

.match-quest-form {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.mq_clsMe {
  background-color: #ffd54f;
  border-radius: 8px;
  padding: 15px;
}

.mq_clsYou {
  background-color: #80cbc4;
  border-radius: 8px;
  padding: 15px;
}

.yes-no-options {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  justify-content: center;
  margin-top: 10px;
}

.priority-options {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  justify-content: center;
  margin-top: 10px;
}

/* Radio labels: radio button BEFORE the text */
.yes-no-options label,
.priority-options label {
  font-size: 15pt;
  cursor: pointer;
}

/* Ensure radio button comes before text */
.yes-no-options input[type="radio"],
.priority-options input[type="radio"] {
  order: -1;
  margin: 0;
  transform: scale(1.3); /* larger radio buttons for easier touch */
}

.form-input-radio:disabled + label {
  color: #888;
  cursor: not-allowed;
}

.clsGreenContainer {
  background-color: #a7e1b8;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

.clsGrayContainer {
  background-color: #f5f5f5;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

.clsYellowContainer {
  background-color: #fffde7;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

.clsCenteredBlueText {
  color: #0288d1;
  text-align: center;
  font-size: 15pt;
  margin-top: 10px;
}

.clsTheirAnswerContainer,
.clsPriorityContainer {
  text-align: center;
}

/* Section labels ("Their Answer" and "Your Priority") */
.clsTheirAnswerContainer label,
.clsPriorityContainer label {
  font-size: 15pt;
  font-weight: bold;
  margin-bottom: 12px;
}

.clsCenteredButton {
  display: block;
  margin: 20px auto 0;
  padding: 12px 24px;
  font-size: 15pt;
}

/* Mobile-specific adjustments */
@media (max-width: 768px) {
  .match-quest-container {
    padding: 15px;
  }

  h1, h2 {
    font-size: 1.5rem;
  }

  .yes-no-options,
  .priority-options {
    flex-direction: column;
    align-items: center;
    gap: 18px;
  }

  .yes-no-options label,
  .priority-options label {
    justify-content: center;
    width: 100%;
    font-size: 15pt;
  }

  .form-input,
  select.form-input {
    width: 100%;
    padding: 10px;
    font-size: 15pt;
  }

  .clsGreenContainer {
    padding: 15px;
  }

  .mq_clsMe,
  .mq_clsYou {
    padding: 12px;
  }

  .clsCenteredButton {
    width: 100%;
    max-width: 300px;
  }
}

.clsPulseAnimation {
  animation: pulse 2s infinite;
}

@keyframes pulse {
  0% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.4); }
  70% { box-shadow: 0 0 0 12px rgba(34, 197, 94, 0); }
  100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); }
}

/* "Save Answer": keep the same size, but center the label top to bottom. The default 10px
   vertical padding in a 40px-tall <input> left the text sitting low, so use no vertical
   padding and a line-height equal to the button height instead. */
.clsButton#save-answer-button {
  padding: 0 16px;
  line-height: 40px;
}


/* Quest name: dark text, with the name itself on a soft yellow highlight — bright yellow text
   was hard to read on the light page background. */
.mq_quest-name {
  color: #0b2a5b;
}
.mq_quest-name i {
  display: inline-block;
  padding: 2px 14px;
  border-radius: 10px;
  background: #ffe066;
  color: #0b2a5b;
  font-weight: bold;
}


/* ---- Fun redesign (mobile-first) ---------------------------------------------------------
   Keeps every id/name the JS uses; the radios are visually hidden and their labels become big
   tappable pill buttons that light up when selected. */
.match-quest-container, .match-quest-container *, .mqf_hero, .mqf_hero * { box-sizing: border-box; }

.mqf_hero {
  text-align: center; margin: 10px auto 16px; padding: 18px 14px; max-width: 800px; border-radius: 20px;
  background: linear-gradient(135deg, #01579b 0%, #0288d1 100%); color: #fff;
  box-shadow: 0 4px 14px rgba(1, 87, 155, 0.3);
}
.mqf_hero_emoji { font-size: 2.4em; line-height: 1; }
.mqf_hero h1 { margin: 6px 0 4px; color: #ffd600; font-size: 1.7em; }
.mqf_hero_quest { margin: 6px 0; font-size: 1.1em; font-weight: bold; overflow-wrap: anywhere; }
.mqf_hero_sub { margin: 6px auto 0; opacity: 0.95; }

.mqf_question {
  position: relative; text-align: center; padding: 26px 18px 18px; border-radius: 22px; background: var(--mqf-tint, #e8f5e9);
  border: 3px solid var(--mqf-accent, #2e7d32); box-shadow: 0 4px 12px rgba(0,0,0,0.10);
  display: flex; flex-direction: column; align-items: stretch; gap: 14px;
}
.mqf_question_icon {
  align-self: center; width: 64px; height: 64px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  font-size: 2.2em; background: #fff; margin-top: -48px; border: 3px solid var(--mqf-accent, #2e7d32);
}
.mqf_cat { align-self: center; font-size: 0.75em; font-weight: bold; color: var(--mqf-accent, #2e7d32); text-transform: uppercase; letter-spacing: 0.05em; }
.mqf_question_text { margin: 0; font-size: 1.4em; line-height: 1.35; color: #14213d; overflow-wrap: anywhere; }
.mqf_answered { margin: 0; color: #666; font-size: 0.95em; }

.mqf_step { padding: 16px 12px; border-radius: 18px; }
.mqf_step_answer { background: #e0f7fa; border: 2px solid #00838f; }
.mqf_step_prio { background: #fff3e0; border: 2px solid #ef6c00; }
.mqf_step h3 { margin: 0 0 10px; font-size: 1.1em; color: #14213d; }
.mqf_step_num {
  display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%;
  background: #14213d; color: #fff; font-size: 0.9em; margin-right: 4px;
}

/* pill buttons */
.mqf_step .yes-no-options, .mqf_step .priority-options { gap: 10px; }
.mqf_step .yes_no_option, .mqf_step .priority_option { position: relative; flex: 1 1 120px; }
.mqf_step input[type="radio"] {
  position: absolute; opacity: 0; inset: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1;
}
.mqf_step .yes_no_option label, .mqf_step .priority_option label {
  display: flex; align-items: center; justify-content: center; min-height: 52px; width: 100%; padding: 8px 14px; margin: 0;
  border-radius: 999px; border: 3px solid #c9d6e2; background: #fff; color: #33475b; font-size: 1.05em; font-weight: bold;
  transition: transform 0.1s, background 0.1s, border-color 0.1s; text-align: center;
}
.mqf_step input[type="radio"]:hover + label { transform: scale(1.04); }
.mqf_step input[type="radio"]:focus-visible + label { outline: 3px solid #0288d1; outline-offset: 2px; }
.mqf_step_answer input[type="radio"]:checked + label { background: #00838f; border-color: #00838f; color: #fff; box-shadow: 0 3px 10px rgba(0,131,143,0.4); transform: scale(1.04); }
.mqf_step_prio input[type="radio"]:checked + label { background: #ef6c00; border-color: #ef6c00; color: #fff; box-shadow: 0 3px 10px rgba(239,108,0,0.4); transform: scale(1.04); }
.mqf_step input[type="radio"]:disabled + label { opacity: 0.5; cursor: not-allowed; }

.mqf_step select.form-input, .mqf_step input.form-input {
  width: 100%; min-height: 52px; padding: 8px 14px; border: 3px solid #c9d6e2; border-radius: 16px; font-size: 16px; background: #fff;
}

.clsButton#save-answer-button {
  min-height: 56px; border-radius: 999px; font-size: 1.15em; font-weight: bold; padding: 0 28px; line-height: 56px;
}
#save-answer-button:not(:disabled) { animation: pulse 2s infinite; }
.mqf_hint { font-size: 1em; }

@media (max-width: 600px) {
  .match-quest-container { padding: 34px 10px 10px; }
  .mqf_hero { margin: 8px 8px 14px; }
  .mqf_hero h1 { font-size: 1.45em; font-size: 1.45rem; }
  .mqf_question_text { font-size: 1.25em; font-size: 1.25rem; }
  .mqf_step .yes-no-options, .mqf_step .priority-options { flex-direction: column; align-items: stretch; gap: 10px; }
  .mqf_step .yes_no_option, .mqf_step .priority_option { flex: none; width: 100%; }
  .clsButton#save-answer-button { width: 100%; max-width: none; }
}

/* "Or choose several answers…": the pill-button rule above (`.mqf_step input[type=radio]` = invisible, absolutely positioned, 100% x 100%,
   z-index 1) also caught the "Any of these is OK / Exclude" radios in here, so an invisible radio covered the whole question card and
   swallowed every click — the tick boxes could not be checked. Inside .mqf_multi the inputs are normal, visible, easy-to-hit controls. */
.mqf_step .mqf_multi input[type="radio"],
.mqf_step .mqf_multi input[type="checkbox"] {
  position: static; opacity: 1; inset: auto; width: auto; height: auto; z-index: auto;
  margin: 0 8px 0 0; transform: scale(1.35); cursor: pointer; vertical-align: middle;
}
.mqf_step .mqf_multi label { cursor: pointer; display: inline-block; padding: 4px 0; font-weight: bold; }
.mqf_step .mqf_multi .mqf_multi_list > div { margin: 4px 0; }

/* Yes/No question: Yes / No / Skip are three equal pills on ONE row (on phones too); the two "leave out" choices sit underneath in smaller,
   two-line pills under their own heading, instead of five mismatched pills wrapping unevenly. TO REVERT: delete this block. */
.mqf_choice_row { display: flex; gap: 10px; }
.mqf_step .mqf_choice_row .yes_no_option { flex: 1 1 0; min-width: 0; width: auto; }
.mqf_or { margin: 14px 0 8px; font-size: 0.9em; color: #4b5d6e; font-style: italic; }
.mqf_exclude_row { display: flex; flex-direction: column; gap: 8px; }
.mqf_step .mqf_exclude_row .yes_no_option { flex: none; width: 100%; }
.mqf_step .mqf_exclude_row .yes_no_option label {
  flex-direction: column; min-height: 48px; border-radius: 16px; border-width: 2px; font-size: 0.98em; padding: 6px 12px; line-height: 1.25;
}
.mqf_step .mqf_exclude_row .yes_no_option label small { font-weight: normal; font-size: 0.8em; color: #5a6b7b; }
.mqf_step_answer .mqf_exclude_row input[type="radio"]:checked + label small { color: #e0f7fa; }
@media (max-width: 700px) {
  .mqf_step .mqf_choice_row { flex-direction: row; align-items: stretch; gap: 8px; }
  .mqf_step .mqf_choice_row .yes_no_option { flex: 1 1 0; width: auto; }
  .mqf_step .mqf_choice_row .yes_no_option label { padding: 8px 6px; font-size: 1em; }
}
/* app/assets/stylesheets/my_connections.css — 💬 My Connections (app/views/my_connections/index.html.erb, 10/30).
   The page is the light-blue .clsBlueContainer, so all text is dark; each card is SOLID white with dark text. */
/* .clsBlueContainer's own margin: 20px loads AFTER this file (application.css require_self), so the class pair is needed to center it. */
.mc_page.clsBlueContainer { max-width: 820px; margin: 20px auto; padding-bottom: 14px; color: #1a1a1a; }
.mc_page h1 { margin: 6px 0 4px; }
.mc_intro, .mc_blurb { color: #333; margin: 4px 0 10px; }
.mc_turnSummary { background: #fff; border: 2px solid #2e7d32; border-radius: 10px; padding: 8px 12px; color: #1a1a1a; }
.mc_section { margin-top: 18px; }
.mc_section h2 { margin: 0 0 2px; color: #1a1a1a; }
.mc_count { font-weight: normal; color: #333; }

.mc_card { background: #fff; color: #1a1a1a; border: 2px solid #b0bec5; border-left-width: 8px; border-radius: 12px; padding: 10px 14px; margin: 10px 0; }
.mc_card.mc_mine { background: #ffe8cc; border-color: #e65100; }     /* orange = your turn */
.mc_card.mc_theirs { background: #fff3b0; border-color: #c9a800; }   /* yellow = waiting on them (user, 10/31) */
.mc_quietSection .mc_card { background: #eceff1; border-color: #b0bec5; }   /* gray = Quiet; thin left border keeps whose turn it is */
.mc_quietSection .mc_card.mc_mine { border-left-color: #e65100; }
.mc_quietSection .mc_card.mc_theirs { border-left-color: #c9a800; }
.mc_card.mc_paused { background: #eceff1; border-color: #78909c; }   /* gray = ⏸️ On pause (no turn label) */
.mc_pausedBox > summary { cursor: pointer; font-weight: bold; color: #1a1a1a; margin: 6px 0; }
.mc_empty { border-left-width: 2px; }

.mc_top { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 4px 12px; }
.mc_name { font-size: 1.2em; font-weight: bold; word-break: break-word; }
.mc_turn { font-weight: bold; white-space: nowrap; }
.mc_mine .mc_turn { color: #8a3000; }
/* "✋ Your turn" pulses (user, 11/1) so the cards waiting on you stand out: a SOLID white pill with dark text, with the same orange ring as the note below. */
.mc_mine .mc_turn { display: inline-block; padding: 2px 12px; border-radius: 999px; background: #fff; color: #8a3000; border: 2px solid #e65100; animation: mcNotePulse 1.8s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .mc_mine .mc_turn { animation: none; } }
.mc_theirs .mc_turn { color: #5c4a00; }
.mc_adminUser { display: inline-block; margin: 4px 0; padding: 2px 10px; background: #fdecea; border: 3px solid #c0392b; border-radius: 6px; color: #a71d2a; }   /* admin only: the other person's user name */
.mc_quest { color: #333; margin-top: 2px; font-weight: bold; }   /* "From your Quest “name”" in bold (user, 11/1) */
.mc_last { margin-top: 8px; padding: 6px 10px; background: #fff; border-radius: 8px; }
.mc_lastWho { color: #333; font-size: 0.95em; }
.mc_lastText { margin-top: 2px; word-break: break-word; }
.mc_note { margin-top: 6px; font-weight: bold; }
/* "They're waiting for your answer to their question": pulsing, dark text on a SOLID yellow background (user, 11/1). */
.mc_note.mc_noteAnswer { display: inline-block; padding: 4px 12px; border-radius: 8px; background: #ffeb3b; color: #3d2f00; border: 2px solid #c9a800; animation: mcNotePulse 1.8s ease-in-out infinite; }
@keyframes mcNotePulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(230, 81, 0, 0.6); } 50% { box-shadow: 0 0 0 10px rgba(230, 81, 0, 0); } }
@media (prefers-reduced-motion: reduce) { .mc_note.mc_noteAnswer { animation: none; } }
/* "🧊 Ice breakers" when it is MY turn to ask one: solid yellow, dark text, gently pulsing (user, 11/1). Beats .clsBlueButton by being doubled up. */
.clsButton.clsBlueButton.mc_iceTurn { background: #ffeb3b; color: #3d2f00; border: 2px solid #c9a800; animation: mcNotePulse 1.8s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .clsButton.clsBlueButton.mc_iceTurn { animation: none; } }
.mc_buttons { display: flex; flex-wrap: wrap; align-items: center; gap: 0 8px; }   /* items level with each other, top to bottom (user, 11/1) */
.mc_buttons .oc_dimmed_why { margin-top: 8px; }   /* same 8px top space the buttons have, so its text sits level with them */
.mc_buttons .clsButton { margin: 8px 0 0; }

/* 💬 in the top menu (next to 🔔): never pulses (only the bell does). */
.mc_navIcon { display: inline-block; }

@media (max-width: 800px) {   /* same phone width as the site's "PHONE SIDE MARGIN" block in application.css */
  .mc_page.clsBlueContainer { margin: 10px; padding-left: 10px; padding-right: 10px; }
  .mc_page h1 { font-size: 1.4em; }
  .mc_section h2 { font-size: 1.2em; }
  .mc_card { padding: 8px 10px; border-left-width: 6px; }
  .mc_last { padding: 6px 8px; }
  .mc_turn { white-space: normal; }
  .mc_buttons .clsButton { flex: 1 1 auto; }
  .mc_buttons .oc_dimmed_why { flex: 1 1 100%; }   /* phone: "Why is this dimmed?" gets its own full-width line, so the opened text isn't squeezed beside a button */
}
/* Existing base styles (keep these) */
/* .clsBlueContainer's own 20px margin + the browser's default <h1> top margin
   stack up into a noticeable gap above the title — scoped to this page only,
   since .clsBlueContainer is shared site-wide. */
.notifications-page.clsBlueContainer {
  margin-top: 8px;
}
.notifications-page h1 {
  margin-top: 4px;
}

/* Wrapper clips the table's corners into a rounded rectangle — border-radius
   on the table itself doesn't render cleanly with border-collapse: collapse.
   20px matches the outer .clsBlueContainer's own rounding (docs/design.md's
   "Less flat" pass) so the table reads as a rounded shape nested inside
   another, not a sharper rectangle stuck inside a softer one. */
.notifications-table-wrap {
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12);
}

.notifications-page .notifications-table {
  width: 100%;
  border-collapse: collapse;
}

.notifications-page th,
.notifications-page td {
  border: 1px solid #ccc;
  padding: 10px;
  text-align: left;
}

.notifications-page .notifications-table tbody tr {
  background-color: #ffffff;
  transition: background-color 0.15s;
}

.notifications-page .notifications-table tbody tr:nth-child(even) {
  background-color: #f5faff;
}

.notifications-page .notifications-table tbody tr:hover {
  background-color: #e3f2fd;
}

/* Unread — same light-blue-highlight + dot + bold text treatment the
   Android app uses for unread notification cards. */
.notifications-page .notifications-table tbody tr.notif-row-unread {
  background-color: #90caf9;
}

.notifications-page .notifications-table tbody tr.notif-row-unread:hover {
  background-color: #7fc0f0;
}

.notif-unread-dot {
  display: inline-block;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: #1565c0;
  margin-right: 6px;
  vertical-align: middle;
}

.notif-unread-text {
  font-weight: bold;
}

.notif-type-badge {
  display: inline-block;
  padding: 4px 10px;
  border-radius: 20px;
  font-size: 0.85em;
  font-weight: bold;
  white-space: nowrap;
}

.notif-type-match {
  background: #f3e8ff;
  color: #6f42c1;
}

.notif-type-quest {
  background: #fff4e0;
  color: #c05e00;
}

.notif-type-question {
  background: #e0f7fa;
  color: #117a8b;
}

.notif-type-general {
  background: #eef0f2;
  color: #555;
}

.clsBlueButton {
  background-color: #007bff;
  color: white;
  padding: 5px 10px;
  text-decoration: none;
  border-radius: 3px;
  margin-right: 10px;
  display: inline-block;
  white-space: nowrap;
}

.notifications-page td:last-child {
  white-space: nowrap;
}

a.clsDeleteButton.clsDeleteButton {
  background-color: #dc3545;
  padding: 3px 8px;
  font-size: 0.85em;
}
a.clsDeleteButton.clsDeleteButton:hover {
  background-color: #b02a37;
}
/* Small, quiet text link — not a full-size button. */
a.notif-mark-unread {
  font-size: 0.85em;
  color: #1a5fb4;
  text-decoration: underline;
  margin-right: 8px;
  white-space: nowrap;
}

/* Mobile-responsive design */
@media (max-width: 768px) {
  /* Each row becomes its own card below with its own shadow/radius — the
     desktop wrapper's overflow:hidden would clip those at the edges. */
  .notifications-table-wrap {
    border-radius: 0;
    overflow: visible;
    box-shadow: none;
  }

  .notifications-page .notifications-table,
  .notifications-page .notifications-table thead,
  .notifications-page .notifications-table tbody,
  .notifications-page .notifications-table tr,
  .notifications-page .notifications-table th,
  .notifications-page .notifications-table td {
    display: block;
    width: 100%;
  }

  /* Hide table header on mobile */
  .notifications-page .notifications-table thead tr {
    position: absolute;
    top: -9999px;
    left: -9999px;
  }

  /* Each notification as a card */
  .notifications-page .notifications-table tr {
    border: 1px solid #ccc;
    margin-bottom: 20px;
    padding: 15px;
    background: #f9f9f9;
    border-radius: 8px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    box-sizing: border-box; /* Ensures padding doesn't cause overflow */
  }

  /* Each cell: label + value on same line */
  .notifications-page .notifications-table td {
    border: none;
    padding: 10px 0;
    text-align: left;
    position: relative;
  }

  /* Label (bold) + value on same line */
  .notifications-page .notifications-table td::before {
    content: attr(data-label) ": ";
    font-weight: bold;
    color: #333;
    display: inline;
  }

  /* Make the message text larger */
  .notifications-page .notifications-table td[data-label="Message (Count)"] {
    font-size: 1.2em; /* Bigger than other text */
    font-weight: 500;
    line-height: 1.4;
  }

  /* No label for Actions column */
  .notifications-page .notifications-table td[data-label="Actions"]::before {
    content: "";
  }

  /* Ensure buttons stay inside container */
  .clsBlueButton {
    display: block;
    width: 100%;
    margin: 10px 0;
    text-align: center;
    padding: 14px;
    font-size: 15pt;
    box-sizing: border-box; /* Critical: includes padding in width */
    border-radius: 6px;
  }
}
/* "Potential Match" details page (match.html.erb) */
.match-page {
  text-align: center;
}

.match-with {
  font-size: 1.2em;
  margin-bottom: 4px;
}

.match-waiting-note {
  /* ⏳ waiting on them = YELLOW everywhere (user, 10/31): solid yellow fill, gold border, dark text — same yellow as "Not answered yet" on the dashboard. */
  background: #fff3b0;
  color: #5c4a00;
  border: 2px solid #c9a800;
  border-radius: 999px;
  padding: 6px 16px;
  font-weight: bold;
  font-style: normal;
  display: inline-block;
  animation: match_waiting_pulse 2s ease-in-out infinite;   /* a gentle pulse (user, 10/31) */
}

@keyframes match_waiting_pulse {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.06); }
}

@media (prefers-reduced-motion: reduce) {
  .match-waiting-note { animation: none; }
}

.match-sent-date {
  color: #888;
  font-size: 0.85em;
  margin-top: 0;
  margin-bottom: 20px;
}

.match-section {
  text-align: left;
  margin: 20px 0;
  padding: 15px;
  border-radius: 10px;
}

.match-section-matched {
  background: #e6f9f0;
  border: 1px solid #28a745;
}

.match-section-unmatched {
  background: #f5f5f5;
  border: 1px solid #ccc;
}

.match-section h2 {
  font-size: 1.2em;
  margin-top: 0;
}

/* Small sub-note tucked right under a section heading. */
.match-section .match-heading-tight {
  margin-bottom: 0;
}

.match-section ul {
  list-style-type: disc;
  padding-left: 22px;
}

.match-section .match-section-note {
  margin: 0 0 10px;
  font-size: 0.8em;
  color: #666;
}

.match-actions {
  margin: 25px 0;
}

.match-already-sent {
  color: #2e7d32;
  font-weight: bold;
}

.match-suggest-section {
  margin-top: 30px;
  padding-top: 20px;
  border-top: 1px solid #ddd;
}

.match-suggested-list {
  list-style: none;
  padding: 0;
  text-align: left;
}

.match-suggested-list li {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  padding: 10px;
  margin-bottom: 8px;
  background: #f0f8ff;
  border-radius: 8px;
  flex-wrap: wrap;
}

.match-q-text {
  flex: 1;
  min-width: 150px;
}

.match-q-actions {
  display: flex;
  gap: 8px;
  flex-shrink: 0;
}

.match-back-link {
  margin-top: 30px;
}

.match-openchat-section {
  margin-top: 30px;
  padding-top: 20px;
  border-top: 1px solid #ddd;
}
.match-openchat-note { color: #444; }
.match-openchat-input {
  width: 100%;
  max-width: 520px;
  box-sizing: border-box;
  margin-bottom: 10px;
}

/* ===== Potential Match page — matches the Android Match Detail screen (2026-09-20).
   Everything scoped under .mp_page so it can't leak. Light-blue container stays; the
   hero and cards are small accents. Text ≥ 15pt. See docs/design.md. ===== */
.mp_page { text-align: center; }

.mp_hero {
  background: linear-gradient(180deg, #e3f2fd 0%, #b3e5fc 100%);
  border: 1px solid #d7ecfc;
  border-radius: 20px;
  padding: 20px 18px;
  margin: 10px 0 18px;
}
.mp_hero-icon { font-size: 40pt; line-height: 1; }
.mp_hero h1 { color: #0b2a5b; font-size: 22pt; margin: 6px 0 8px; }
.mp_hero-intro { color: #2b2b2b; font-size: 15pt; margin: 0 0 8px; }
.mp_hero-meta { color: #555; font-size: 15pt; margin: 0; }

.mp_admin { text-align: left; margin: 0 0 18px; font-size: 15pt; color: #c0392b; border-width: 3px; border-radius: 16px; }

.mp_card {
  text-align: left;
  background: #fff;
  border: 1px solid #d7ecfc;
  border-radius: 16px;
  box-shadow: 0 2px 6px rgba(2, 136, 209, 0.12);
  padding: 16px 18px;
  margin: 0 0 16px;
}
.mp_card-blue { background: #e3f2fd; border: 2px solid #90caf9; box-shadow: none; }
.mp_card h2 { color: #0b2a5b; font-size: 17pt; margin: 0 0 8px; }
.mp_note { color: #444; font-size: 15pt; margin: 0 0 12px; }

.mp_choose { color: #0b2a5b; font-size: 19pt; text-align: left; margin: 6px 0 4px; }
.mp_choose-hint { color: #555; font-size: 15pt; text-align: left; margin: 0 0 14px; }

.mp_criteria { list-style: none; padding: 0; margin: 0; }
.mp_row { padding: 8px 12px; margin-bottom: 4px; border-radius: 8px; font-size: 15pt; }
.mp_row-match { background: #e8f5e9; color: #1b5e20; }
.mp_row-miss { background: #fff8e1; color: #7a5b00; }  /* amber, not red — red is admin-only */

.mp_card .match-actions { margin: 0; text-align: center; }
.mp_sent-at { color: #2e7d32; font-weight: bold; font-size: 15pt; margin: 8px 0 0; }

/* Yellow pill = the main action; gray once used / disabled. */
.mp_page .mp_yellow,
.mp_page a.mp_yellow,
.mp_page a.mp_yellow:visited {
  background: #ffd43b;
  color: #0b2a5b;
  font-weight: bold;
  font-size: 15pt;
  border-radius: 25px;
  height: auto;
  min-height: 46px;
  padding: 8px 24px;
  text-decoration: none;
  transition: transform 0.2s, background 0.2s;
}
.mp_page .mp_yellow:hover:not(:disabled) { background: #ffe066; transform: scale(1.03); }
.mp_page .mp_yellow:disabled { background: #cfd8dc; color: #607d8b; cursor: default; }

/* Question ideas built by the page's script. */
.mp_page .match-suggested-list li { background: #e3f2fd; }
.mp_page .matchSendQuestionBtn { background: #ffd43b; color: #0b2a5b; }
.mp_page .matchSendQuestionBtn:hover:not(:disabled) { background: #ffe066; }
.mp_page .matchRerollBtn { background: #e3f2fd; color: #01579b; }
.mp_page .matchSendQuestionBtn:disabled, .mp_page .matchRerollBtn:disabled { background: #cfd8dc; color: #607d8b; }

/* Neutralize the older section dividers now that each part is its own card. */
.mp_page .mp_card.match-suggest-section,
.mp_page .mp_card.match-openchat-section { margin-top: 0; padding-top: 16px; border-top: 1px solid #d7ecfc; }
.mp_page .mp_card-blue.match-openchat-section { border: 2px solid #90caf9; }

.mp_notinterested-wrap { margin: 6px 0 0; }
.mp_page a.mp_notinterested, .mp_page a.mp_notinterested:visited { color: #555; font-size: 15pt; text-decoration: underline; }

/* Phones: "My Notifications" still read too big after the site-wide phone scale-down — a bit smaller again
   (stacks with .container's 0.87 ≈ 0.78 overall) and the message text no longer bigger than the rest.
   To revert, delete this block. */
@media (max-width: 699px) {
  .notifications-page { zoom: 0.9; }
  .notifications-page .notifications-table td[data-label="Message (Count)"] { font-size: 1.05em; }
  .notifications-page .notifications-table tr { padding: 12px; margin-bottom: 14px; }
}

/* The main action ("Answer" / "View" / "Open") — bright yellow so it is the first thing you notice, ahead of Delete. */
a.notif-open-btn.clsBlueButton {
  background-color: #ffd43b;
  color: #0b2a5b;
  font-weight: bold;
  text-decoration: none;
  display: inline-block;
  padding: 3px 12px;
  margin-right: 6px;
}
a.notif-open-btn.clsBlueButton:hover { background-color: #ffe066; }

/* Phones: page title a tad smaller. */
@media (max-width: 699px) {
  .notifications-page h1 { font-size: 1.45em; }
  a.notif-open-btn.clsBlueButton { display: block; margin-right: 0; }
}

/* "They're interested too!" page: the title stays on ONE line; the font scales with the screen width (full size on desktop). */
.mp_hero h1.mp_one_line { white-space: nowrap; font-size: clamp(14px, 6.4vw, 22pt); }

/* "They're interested too!" line under the page headline. */
.mp_hero h2.mp_hero_sub { font-size: 1.15em; margin: 4px 0 8px; color: #01579b; }

/* Match page: the quest name is a link to the member's own quest. */
.mp_page a.mp_quest_link, .mp_page a.mp_quest_link:visited { color: #01579b; font-weight: bold; text-decoration: underline; }
.mp_page .mp_quest_hint { color: #607d8b; font-size: 0.75em; white-space: nowrap; }

/* Match page on a phone: tighter spacing and slightly smaller type so nothing crowds or overflows; the main buttons span the
   width so they're easy to tap; long words and answers wrap instead of running off the edge. */
@media (max-width: 699px) {
  .mp_page { padding-left: 8px; padding-right: 8px; }
  .mp_hero { padding: 14px 12px; margin: 6px 0 12px; border-radius: 16px; }
  .mp_hero-icon { font-size: 30pt; }
  .mp_hero h1 { font-size: 17pt; line-height: 1.2; }
  .mp_hero-intro, .mp_hero-meta { font-size: 13.5pt; line-height: 1.4; }
  .mp_card { padding: 12px; border-radius: 14px; margin-bottom: 12px; overflow-wrap: anywhere; }
  .mp_card h2 { font-size: 15pt; }
  .mp_note, .mp_row, .mp_choose-hint { font-size: 13.5pt; }
  .mp_choose { font-size: 16pt; }
  .mp_page .mp_yellow, .mp_page a.mp_yellow, .mp_page a.mp_yellow:visited {
    display: flex; width: 100%; box-sizing: border-box; justify-content: center; text-align: center; font-size: 14pt;
  }
  .mp_page .match-actions form, .mp_page .match-actions .button_to { width: 100%; }
  .mp_page .s_clsTallyBox { gap: 6px 16px; padding: 8px 12px; }
}


/* Match page on a phone: the ice-breaker row ("Reroll" + "Send This Question") wraps inside the card instead of running off its edge,
   and the one-line title is shrunk by a small script (match.html.erb) until it fits the blue box. */
@media (max-width: 699px) {
  .mp_page .match-suggested-list li { flex-direction: column; align-items: stretch; }
  .mp_page .match-q-text { min-width: 0; }
  .mp_page .match-q-actions { flex-shrink: 1; flex-wrap: wrap; width: 100%; }
  .mp_page .match-q-actions .clsButton { flex: 1 1 130px; white-space: normal; box-sizing: border-box; }
  .mp_hero h1.mp_one_line { overflow: hidden; }
}

/* "Mark unread" link: on its own line above the Open / View / Answer button. TO REVERT: delete this block. */
.notif-mark-unread-row { margin: 0 0 4px; }

/* The three "piles" (questions / potential matches / people who want to connect) — one blue row each, closed until "Show" (user, 11/1). */
.notifications-page .notifications-table td.notif_pile_cell {
  background: #e3f2fd;
  color: #1a1a1a;
  border: 2px solid #90caf9;
  padding: 10px 14px;
  font-weight: bold;
}
@media (max-width: 768px) {
  /* On a phone every row is a card with "label: value" cells — a pile row has no label, so drop the stray ": " and the card's own box. */
  .notifications-page .notifications-table tr.notif_pile_head { padding: 0; margin-bottom: 12px; background: none; border: 0; box-shadow: none; }
  .notifications-page .notifications-table td.notif_pile_cell { border-radius: 10px; padding: 14px 16px; font-size: 1.1em; box-sizing: border-box; }
  .notifications-page .notifications-table td.notif_pile_cell::before { content: ""; }
  .notifications-page .notifications-table .notif_pile_toggle { min-height: 44px; }   /* a thumb-sized tap target */
}
/* app/assets/stylesheets/open_conversations.css — free-text 1:1 chat thread
   (app/views/open_conversations/show.html.erb). */
.oc_clsThreadPage h1 {
  margin: 0 0 4px;
}

.oc_clsHeaderRow {
  display: flex;
  justify-content: flex-start;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 4px 20px;
}

.oc_clsBackLink {
  white-space: nowrap;
}

.oc_clsMatchBadge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.8rem;
  vertical-align: middle;
  background: rgba(255, 255, 255, 0.85);
  color: #222;
  border-radius: 20px;
  padding: 4px 10px;
  margin-left: 0;
}

.oc_clsBadgeRow {
  margin: 0 0 4px;
}

.oc_clsMatchDot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  display: inline-block;
}

.oc_clsMessages {
  background: #fff;
  border-radius: 10px;
  padding: 12px;
  margin: 12px 0;
  /* No scroll box inside the page: the messages make the page itself longer (was max-height: 60vh + overflow-y: auto). */
}

.oc_clsEmpty {
  color: #666;
  text-align: center;
  padding: 20px 0;
}

.oc_clsMessage {
  max-width: 75%;
  margin: 6px 0;
  padding: 8px 12px;
  border-radius: 12px;
  background: #eef0f2;
  color: #222;
}

.oc_clsMine {
  margin-left: auto;
  background: #0a58ca;
  color: #fff;
}

.oc_clsMessageSender {
  margin: 0 0 2px;
  font-size: 0.75em;
  font-weight: bold;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  opacity: 0.7;
}

.oc_clsMessageBody {
  margin: 0;
  white-space: pre-wrap;
  word-break: break-word;
}

.oc_clsMessageMeta {
  margin: 4px 0 0;
  font-size: 0.75em;
  opacity: 0.75;
}

.oc_clsMine .oc_clsMessageMeta a {
  color: #cfe2ff;
}

.oc_clsSendBtn {
  font-size: 1.15em;
  padding: 12px 24px;
  height: auto;
}

.oc_clsAliasBox {
  margin: 4px 0 8px;
  font-size: 0.9rem;
}
.oc_clsAliasBox summary { cursor: pointer; }
.oc_clsAliasBox form { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 6px; }

/* Locked chat ("… sent you a message! Upgrade to read it"): the See Plans button is centered left to right and only as wide as its text
   (the shared .clsButton 10px margin used to push it off-center); the empty white messages box below it is hidden by the view. */
.oc_clsLocked { text-align: center; }
.oc_clsLocked a.oc_plans_btn, .oc_clsLocked a.oc_plans_btn:visited {
  display: inline-flex; width: auto; max-width: 90%; margin: 6px auto 2px; padding: 6px 22px; box-sizing: border-box; text-decoration: none;
}

/* Space at the bottom of the open-chat page (docs/design.md "Space above the footer"): 8px blue inside the bottom, 8px white above the
   footer — nothing more. TO REVERT: delete this block. */
.oc_clsThreadPage.clsBlueContainer { padding-bottom: 8px; margin-bottom: 8px; }
.oc_clsThreadPage.clsBlueContainer > :last-child { margin-bottom: 0; }
.oc_clsThreadPage > .oc_clsLocked { margin-bottom: 0 !important; }   /* beats the box's inline margin */
.container:has(.oc_clsThreadPage) + .f_site-footer { margin-top: 8px; }

/* Page title: the 💬 sits to the LEFT of the person's name on the same line (a long name wraps inside its own space instead of
   pushing the emoji onto a line of its own). TO REVERT: delete this block. */
.oc_clsThreadPage h1 { display: flex; align-items: center; gap: 0.3em; min-width: 0; }
.oc_clsThreadPage h1 .oc_titleEmoji { flex: 0 0 auto; }
.oc_clsThreadPage h1 .oc_titleName { min-width: 0; overflow-wrap: anywhere; }

/* Page title on ONE line: emoji + name never wrap; a small script (open_conversations/show.html.erb) shrinks the text only as much as
   needed to fit the width, and no smaller. The title gets the full row (under "← Back"). TO REVERT: delete this block + that script. */
.oc_clsHeaderRow h1 { flex: 1 1 100%; overflow: hidden; white-space: nowrap; }
.oc_clsThreadPage h1 .oc_titleName { white-space: nowrap; overflow-wrap: normal; }

/* The shared .clsBlueContainer's overflow-x: hidden quietly turns into a scroll box too; clip the sides without making one. */
.oc_clsThreadPage.clsBlueContainer { overflow-x: clip; overflow-y: visible; }
/* Small page name, so a member can say which page they mean. */
.oc_pageName { text-align: center; margin: 0 0 2px; font-size: 0.8em; font-weight: bold; letter-spacing: 0.04em; text-transform: uppercase; color: #607d8b; }
/* app/assets/stylesheets/others_quests.css */

.quests-clsQuestsContainer {
  text-align: center;
  padding: 20px;
  background-color: #e3f2fd;
  border-radius: 10px;
  margin: 20px auto;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.highlight {
  color: #d81b60;
  font-weight: bold;
  font-size: 1.2em;
}
/* app/assets/stylesheets/others_quests_percentage.css */

/* Cards wrap into a responsive grid that fits the page — no more sideways scrolling off the
   edge. As many ~300px+ columns as fit; one column on a phone. */
.clsScrollContainer {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr));
  gap: 18px;
  padding: 16px 4px 20px;
}

/* Use the screen on a wide browser (docs/design.md "Layout"), same as the other pages. */
.clsQuestsContainer.gsp_page {
  max-width: min(1200px, 95vw);
  margin-left: auto;
  margin-right: auto;
  box-sizing: border-box;
}

.clsQuestBox {
  background-color: #ffffff;
  border: 2px solid #007bff;
  border-radius: 12px;
  padding: 25px;
  min-width: 0;
  box-sizing: border-box;
  overflow-wrap: anywhere;
  text-align: center;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}

/* Quest cards are now clickable — straight through to answer/edit your own
   answer to that question (see _quest_box.html.erb). */
a.clsQuestBoxLink {
  display: block;
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}

a.clsQuestBoxLink:hover,
a.clsQuestBoxLink:focus-visible {
  transform: translateY(-3px);
  box-shadow: 0 8px 18px rgba(0, 123, 255, 0.25);
  border-color: #0056b3;
}

.gsp_answer-cta {
  margin-top: 14px !important;
  font-size: 0.75em !important;
  font-weight: bold;
  color: #007bff;
  opacity: 0.85;
}

.gsp_hint {
  font-size: 0.95em;
  color: #4b5563;
  margin-top: -4px;
}

/* Bottom CTA pair — side by side instead of stacked, matches the site's
   pill-button convention (.clsRoundButton) instead of the plain rectangular
   .clsButton default. */
.gsp_cta-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px;
  margin-top: 24px;
}

@media (max-width: 480px) {
  .gsp_cta-row {
    flex-direction: column;
    align-items: center;
  }
}

.clsHighlight {
  font-size: 2.5em;
  font-weight: bold;
  color: #ffffff;
  background-color: #007bff;
  border-radius: 8px;
  padding: 10px;
  display: block;
  margin-bottom: 15px;
}

.clsQuestBox p {
  margin: 8px 0;
  font-size: 1.4em;
  line-height: 1.4;
}

.clsQuestBox .gsp_category {
  color: #333333;
  font-size: 1em;
}

.clsQuestBox .gsp_question {
  font-size: 2em;
  font-weight: bold;
}

/* Mobile adjustments */
@media (max-width: 768px) {
  .clsQuestBox {
    padding: 20px;
  }

  .clsHighlight {
    font-size: 2.2em;
    padding: 8px;
  }

  .clsQuestBox p {
    font-size: 1.3em;
  }

  .clsQuestBox strong {
    font-size: 1.4em;
  }

  .clsScrollContainer {
    gap: 12px;
    padding: 12px 0;
  }

  .clsQuestsContainer {
    padding: 10px;
  }

  h1 {
    font-size: 1.8em;
  }

  h2 {
    font-size: 1.5em;
  }

  h3 {
    font-size: 1.3em;
  }
}
/* Admin-only debug section (matches other pages) */
.dq_clsAdminDebug {
  max-width: 600px;
  margin: 20px auto 0;
  padding: 8px 12px;
  font-size: 0.85em;
  color: #555;
  background: #fdecea;
  border: 1px dashed #e57373;
  border-radius: 8px;
}

.dq_clsAdminDebug summary {
  cursor: pointer;
  font-weight: bold;
  color: #6c757d;
}

.dq_clsAdminDebug div {
  margin-top: 6px;
  font-family: monospace;
}

/* ============================================================ */
/* Fun pass (2026-10-03) — docs/design.md house style: dark hero, */
/* colour-coded priority sections, glowing yellow CTAs. Text >= 15pt. */
/* ============================================================ */

/* Priority accents — each section and its cards share one colour. */
.gsp_accent-required  { --accent: #d32f2f; --accent-dark: #8e1b1b; --accent-soft: rgba(211, 47, 47, 0.25); }
.gsp_accent-high      { --accent: #f57c00; --accent-dark: #a85400; --accent-soft: rgba(245, 124, 0, 0.25); }
.gsp_accent-preferred { --accent: #0288d1; --accent-dark: #01579b; --accent-soft: rgba(2, 136, 209, 0.25); }
.gsp_accent-nice      { --accent: #2e9e5b; --accent-dark: #1a6b3b; --accent-soft: rgba(46, 158, 91, 0.25); }

/* Hero banner */
.gsp_hero {
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 60%, #0288d1 100%);
  color: #fff;
  text-align: center;
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
  padding: 22px 20px 18px;
  margin: 4px 0 8px;
}
.gsp_hero-emoji {
  font-size: 36pt;
  line-height: 1.1;
  display: inline-block;
  animation: gsp_bounce 2.4s ease-in-out infinite;
}
.gsp_hero h2 { color: #fff; font-size: 24pt; margin: 4px 0 8px; }
.gsp_hero p { color: #e3f2fd; font-size: 15pt; margin: 6px auto; max-width: 820px; }
.gsp_hero .gsp_hint { color: #ffe066; font-size: 15pt; font-weight: bold; margin-top: 10px; }

/* Section banners */
.gsp_section-title {
  display: block;
  color: #fff;
  background: linear-gradient(135deg, var(--accent), var(--accent-dark));
  font-size: 18pt;
  border-radius: 14px;
  padding: 10px 18px;
  margin: 22px 0 4px;
  box-shadow: 0 3px 10px var(--accent-soft);
}

/* Cards */
.clsQuestBox.gsp_accent-required,
.clsQuestBox.gsp_accent-high,
.clsQuestBox.gsp_accent-preferred,
.clsQuestBox.gsp_accent-nice {
  border: 2px solid var(--accent);
  border-radius: 16px;
  box-shadow: 0 3px 10px var(--accent-soft);
}
.clsQuestBox.gsp_accent-required .clsHighlight,
.clsQuestBox.gsp_accent-high .clsHighlight,
.clsQuestBox.gsp_accent-preferred .clsHighlight,
.clsQuestBox.gsp_accent-nice .clsHighlight {
  background: linear-gradient(135deg, var(--accent), var(--accent-dark));
  border-radius: 12px;
  margin-bottom: 8px;
}
a.clsQuestBoxLink.gsp_accent-required:hover,
a.clsQuestBoxLink.gsp_accent-high:hover,
a.clsQuestBoxLink.gsp_accent-preferred:hover,
a.clsQuestBoxLink.gsp_accent-nice:hover,
a.clsQuestBoxLink.gsp_accent-required:focus-visible,
a.clsQuestBoxLink.gsp_accent-high:focus-visible,
a.clsQuestBoxLink.gsp_accent-preferred:focus-visible,
a.clsQuestBoxLink.gsp_accent-nice:focus-visible {
  border-color: var(--accent-dark);
  box-shadow: 0 10px 22px var(--accent-soft);
  transform: translateY(-4px) rotate(-0.4deg);
}

/* Little bar showing how popular the quest is. */
.gsp_meter {
  height: 12px;
  background: #e5e7eb;
  border-radius: 999px;
  overflow: hidden;
  margin: 0 0 8px;
}
.gsp_meter-fill {
  height: 100%;
  min-width: 6px;
  background: linear-gradient(90deg, var(--accent), var(--accent-dark));
  border-radius: 999px;
}

/* The "tap to answer" line was 0.75em (~11pt) — below the 15pt floor. */
.gsp_answer-cta {
  font-size: 15pt !important;
  color: var(--accent-dark, #01579b);
  opacity: 1;
}

/* Bottom buttons: glowing yellow pills. */
.gsp_cta-row .gsp_cta,
.gsp_cta-row .gsp_cta.clsBlueButton {
  background: #ffd43b;
  color: #2b2b2b;
  font-weight: 700;
  font-size: 15pt;
  border-radius: 25px;
  height: auto;
  min-height: 48px;
  padding: 10px 26px;
  box-shadow: 0 0 12px rgba(255, 212, 59, 0.55);
  transition: transform 0.2s, background 0.2s;
}
.gsp_cta-row .gsp_cta:hover { background: #ffe066; transform: scale(1.05); }

@keyframes gsp_bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-6px); }
}
@media (prefers-reduced-motion: reduce) {
  .gsp_hero-emoji { animation: none; }
  a.clsQuestBoxLink:hover { transform: none; }
}
@media (max-width: 600px) {
  .gsp_hero h2 { font-size: 21pt; }
  .gsp_section-title { font-size: 16pt; }
}

/* Smaller cards on a laptop-width browser: narrower columns (more per row), tighter padding, and
   smaller — but still >= 15pt — type. Phones keep the single-column layout above. */
@media (min-width: 769px) {
  .clsScrollContainer {
    grid-template-columns: repeat(auto-fill, minmax(min(250px, 100%), 1fr));
    gap: 14px;
  }
  .clsQuestBox {
    padding: 14px 16px;
  }
  .clsQuestBox .clsHighlight {
    font-size: 1.8em;
    padding: 4px 8px;
    margin-bottom: 6px;
  }
  .clsQuestBox p {
    font-size: 1em;
    margin: 4px 0;
    line-height: 1.35;
  }
  .clsQuestBox .gsp_question {
    font-size: 1.25em;
  }
  .clsQuestBox .gsp_category {
    font-size: 1em;
  }
  .gsp_answer-cta {
    margin-top: 8px !important;
  }
}

/* Admin-only "edit answers" link under each card (red shaded + bold red border = admin-only). */
.gsp_card-wrap {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}
.gsp_card-wrap > .clsQuestBox { flex: 1 1 auto; }
a.gsp_admin-link {
  display: block;
  text-align: center;
  background-color: #fdecea;
  color: #c0392b;
  border: 2px solid #c0392b;
  border-radius: 10px;
  padding: 6px 10px;
  font-weight: bold;
  font-size: 15pt;
  text-decoration: none;
}
a.gsp_admin-link:hover { background-color: #f8c9c4; }

/* Question emoji above the quoted question. */
.gsp_q-icon {
  display: block;
  font-size: 30pt;
  line-height: 1.1;
  margin: 4px 0 0;
}

/* ---- Cards coloured by CATEGORY (not priority). Section banners stay house blue. ---- */
.gsp_cat-0 { --accent: #0288d1; --accent-dark: #01579b; --accent-soft: rgba(2, 136, 209, 0.25); }
.gsp_cat-1 { --accent: #2e9e5b; --accent-dark: #1a6b3b; --accent-soft: rgba(46, 158, 91, 0.25); }
.gsp_cat-2 { --accent: #f57c00; --accent-dark: #a85400; --accent-soft: rgba(245, 124, 0, 0.25); }
.gsp_cat-3 { --accent: #8e24aa; --accent-dark: #5e1773; --accent-soft: rgba(142, 36, 170, 0.25); }
.gsp_cat-4 { --accent: #00897b; --accent-dark: #00574d; --accent-soft: rgba(0, 137, 123, 0.25); }
.gsp_cat-5 { --accent: #3949ab; --accent-dark: #232e75; --accent-soft: rgba(57, 73, 171, 0.25); }
.gsp_cat-6 { --accent: #b7791f; --accent-dark: #7a4f12; --accent-soft: rgba(183, 121, 31, 0.25); }
.gsp_cat-7 { --accent: #6d4c41; --accent-dark: #43302a; --accent-soft: rgba(109, 76, 65, 0.25); }
.gsp_cat-8 { --accent: #546e7a; --accent-dark: #34444c; --accent-soft: rgba(84, 110, 122, 0.25); }
.gsp_cat-9 { --accent: #689f38; --accent-dark: #3f6321; --accent-soft: rgba(104, 159, 56, 0.25); }

.clsQuestBox[class*="gsp_cat-"] {
  border: 2px solid var(--accent);
  border-radius: 16px;
  box-shadow: 0 3px 10px var(--accent-soft);
}
.clsQuestBox[class*="gsp_cat-"] .clsHighlight {
  background: linear-gradient(135deg, var(--accent), var(--accent-dark));
  border-radius: 12px;
  margin-bottom: 8px;
}
a.clsQuestBoxLink[class*="gsp_cat-"]:hover,
a.clsQuestBoxLink[class*="gsp_cat-"]:focus-visible {
  border-color: var(--accent-dark);
  box-shadow: 0 10px 22px var(--accent-soft);
  transform: translateY(-4px) rotate(-0.4deg);
}
@media (prefers-reduced-motion: reduce) {
  a.clsQuestBoxLink[class*="gsp_cat-"]:hover { transform: none; }
}

/* "…answered: No" — the answer other members' quests are looking for, as a highlighted chip. */
.gsp_answer-chip {
  display: inline-block;
  background: #ffe066;
  color: #2b2b2b;
  font-weight: 700;
  border-radius: 999px;
  padding: 1px 14px;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
}

/* The viewer's own answer to this question. */
.clsQuestBox p.gsp_my-answer {
  margin: 10px 0 4px;
  padding: 6px 10px;
  background: #f1f5f9;
  border-radius: 10px;
  font-size: 1em;
}
.clsQuestBox p.gsp_my-answer-none {
  background: #fff8e1;
  color: #5f4b00;
  font-weight: bold;
}

/* Unanswered cards pulse a soft glow in their category colour to say "answer me". */
.clsQuestBox.gsp_pulse {
  animation: gsp_card_pulse 1.8s ease-in-out infinite;
}
@keyframes gsp_card_pulse {
  0%, 100% { box-shadow: 0 3px 10px var(--accent-soft, rgba(2, 136, 209, 0.25)); transform: scale(1); }
  50%      { box-shadow: 0 0 0 6px var(--accent-soft, rgba(2, 136, 209, 0.25)), 0 6px 18px var(--accent-soft, rgba(2, 136, 209, 0.35)); transform: scale(1.015); }
}
@media (prefers-reduced-motion: reduce) {
  .clsQuestBox.gsp_pulse { animation: none; border-width: 4px; }
}

/* Do you match what this card's quests are looking for? */
.clsQuestBox p.gsp_match-badge {
  margin: 6px 0 4px;
  padding: 5px 10px;
  border-radius: 999px;
  font-weight: 700;
  font-size: 1em;
}
.clsQuestBox p.gsp_match-yes {
  background: #dcefe0;
  color: #1a7f37;
  border: 2px solid #1a7f37;
}
.clsQuestBox p.gsp_match-no {
  background: #eef0f3;
  color: #555;
  border: 2px solid #cfd4da;
}

/* ── Phones: smaller text/title, a folded-away explanation, and a wider (but not edge-to-edge) container ───── */
.gsp_more summary { cursor: pointer; font-weight: bold; color: #ffe066; padding: 6px 0; list-style-position: inside; }
.gsp_more[open] summary { margin-bottom: 4px; }
@media (max-width: 699px) {
  .gsp_title { font-size: 1.25em; margin: 8px 8px 4px; text-align: center; }
  .clsQuestsContainer.gsp_page {
    max-width: none;
    margin: 6px 8px;
    padding: 8px;
    border-radius: 16px;
    zoom: 0.92;   /* a bit smaller again on top of the site-wide phone scale-down (≈ 0.80 overall) */
  }
  .gsp_hero { padding: 14px 12px 12px; }
  .gsp_hero-emoji { font-size: 26pt; }
  .gsp_hero h2 { font-size: 18pt; }
  .gsp_hero p { line-height: 1.35; }
}

/* Phones: shorter cards — the same compact sizing the laptop view already uses (the phone sizes were the big ones:
   20px padding, 2.2em percentage, 1.3em lines, 2em question). All the same lines are still on each card. */
@media (max-width: 699px) {
  .clsQuestBox { padding: 12px 14px; }
  .clsQuestBox .clsHighlight { font-size: 1.8em; padding: 4px 8px; margin-bottom: 6px; }
  .clsQuestBox p { font-size: 1em; margin: 4px 0; line-height: 1.3; }
  .clsQuestBox .gsp_question { font-size: 1.2em; }
  .clsQuestBox .gsp_category { font-size: 1em; }
  .clsQuestBox strong { font-size: 1em; }
  .gsp_q-icon { font-size: 22pt; margin: 0; }
  .gsp_meter { margin-bottom: 4px; }
  .gsp_answer-cta { margin-top: 6px !important; }
  .clsScrollContainer { gap: 10px; padding: 8px 0; }
}
/* app/assets/stylesheets/page_view.css */

.pv_container {
  max-width: 100%;
  overflow-x: auto;
  padding: 1rem;
  /* admin-only page: red-shaded background + bold red border (see docs/design.md "Admin-only marking") */
  background: #fdecea;
  border: 3px solid #c0392b;
  border-radius: 5px;
  margin: 10px;
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

  .pv_pagination_top {
  margin-bottom: 20px;
}

.pv_search_wrapper {
  margin: 15px 0;
  background: #f8f9fa;
  padding: 10px;
  border-radius: 6px;
  border: 1px solid #dee2e6;
}

.pv_title {
  color: #0288d1;
  margin-bottom: .5rem;
}

.pv_filters {
  display: flex;
  gap: .5rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
  align-items: center;
}

.pv_date_range {
  display: flex;
  gap: .3rem;
  align-items: center;
}

.pv_btn {
  padding: .4rem .8rem;
  border-radius: 5px;
  font-weight: bold;
  text-decoration: none;
  font-size: .9rem;
  cursor: pointer;
  border: none;
}

.pv_btn_filter, .pv_btn_search {
  background: #0288d1;
  color: white;
}

.pv_btn_filter:hover, .pv_btn_search:hover {
  background: #01579b;
}

.pv_btn_danger {
  background: #d81b60;
  color: white;
}

.pv_btn_danger:hover {
  background: #a11245;
}

.pv_btn_delete {
  background: #d81b60;
  color: white;
  font-size: .8rem;
  padding: .3rem .6rem;
}

.pv_table {
  border-collapse: collapse;
  margin-top: 1rem;
  font-size: .9rem;
  background: white;
  border-radius: 5px;
  overflow: hidden;
  table-layout: fixed;
  width: 100%;
}

.pv_table th {
  background: #0288d1;
  color: white;
  font-weight: bold;
  padding: .5rem;
  text-align: left;
  white-space: nowrap;
}

.pv_table td {
  padding: .4rem .6rem;
  border-bottom: 1px solid #ddd;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.pv_table tr:hover {
  background: #e0f0ff;
}

.pv_th_sortable {
  cursor: pointer;
  user-select: none;
}

.pv_th_sortable:hover {
  background: #01579b;
}

.pv_search_input {
  width: 100%;
  box-sizing: border-box;
  font-size: 1rem;
  padding: 0.3rem; /* Reduced from 10px → 0.3rem */
  border: 1px solid #ddd;
  border-radius: 5px;
}

.pv_search_input:focus {
  outline: none;
  border-color: #0288d1;
  box-shadow: 0 0 5px rgba(2,136,209,0.3);
}

.pv_session_header {
  background: #e2e3e5;
  font-weight: bold;
  cursor: pointer;
}

.pv_collapse_icon {
  float: right;
  font-weight: bold;
}

.pv_link {
  color: #0288d1;
  text-decoration: underline;
}

.pv_link:hover {
  color: #01579b;
}

.pv_col_question {
  font-size: 0.85em;
  color: #555;
}

.pv_pagination {
  margin-top: 1rem;
  text-align: center;
}

.pv_spinner {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: rgba(0,0,0,.7);
  color: white;
  padding: 1rem 2rem;
  border-radius: 5px;
  z-index: 9999;
}

/* ============================================================= */
/* PER-COLUMN STYLING CLASSES — FOR DATA CELLS (<td>)            */
/* ============================================================= */
.pv_col_mono td {
  font-family: 'Courier New', monospace;
}

.pv_col_wrap td {
  white-space: normal;
  word-wrap: break-word;
}

/* .pv_col_wrap is applied directly on the <td> itself for some columns
   (Path, Session ID) rather than on an ancestor, so it also needs a rule
   that targets the class on the td directly — ".pv_col_wrap td" above only
   matches a <td> nested inside one, which never happens. Higher specificity
   than the base ".pv_table td" (which sets nowrap + ellipsis) so the full
   value shows and wraps instead of getting cut off. */
.pv_table td.pv_col_wrap {
  white-space: normal;
  word-wrap: break-word;
  overflow: visible;
  text-overflow: unset;
}

/* The full user agent: wraps anywhere (it has long unbroken pieces) and can be selected / copied. */
.pv_table td.pv_col_ua {
  word-break: break-all;
  user-select: text;
  font-size: 0.85em;
}

.pv_col_truncate td {
  max-width: 150px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ============================================================= */
/* SEARCH INPUTS — INDIVIDUAL COLUMN STYLING (NEW!)              */
/* ============================================================= */
.searchcolumn2 input { /* Viewed At */
  width: 100%;
  box-sizing: border-box;
padding: 0.3rem !important;     /* Match .pv_search_input */
  margin: 0 !important;           /* Remove any accidental margin */
  border-width: 1px !important;   /* Consistent border */
  font-size: 1rem !important;
}

.searchcolumn3 input { /* User */
  max-width: 100%;
  font-size: 1rem;
  color: #1976d2;
  background: #e3f2fd;
  border: 1px solid #bbdefb;
}

.searchcolumn4 input { /* Page Path */
  max-width: 100%;
  font-size: 1rem;
  color: #388e3c;
  background: #e8f5e8;
  border: 1px solid #c8e6c9;
}

.searchcolumn5 input { /* Session ID */
  max-width: 100%;
  font-family: 'Courier New', monospace;
  font-size: 1rem;
  color: #7b1fa2;
  background: #f3e5f5;
  border: 1px solid #e1bee7;
}

.searchcolumn6 input { /* IP Address */
  max-width: 100%;
  font-family: 'Courier New', monospace;
  font-size: 1rem;
  color: #f57c00;
  background: #fff3e0;
  border: 1px solid #ffe0b2;
}

.searchcolumn7 input { /* User Agent */
  max-width: 100%;
  font-size: 1rem;
  color: #5d4037;
  background: #efebe9;
  border: 1px solid #d7ccc8;
}

.searchcolumn8 input { /* Referrer */
  max-width: 100%;
  font-size: 1rem;
  color: #6a1b9a;
  background: #f3e5f5;
  border: 1px solid #e1bee7;
}

.searchcolumn9 input { /* Query String */
  max-width: 100%;
  font-size: 1rem;
  color: #c2185b;
  background: #fce4ec;
  border: 1px solid #f8bbd0;
}

.searchcolumn1 button { /* Search button */
  font-size: 1rem;
  padding: 0.4rem 0.8rem;
  min-width: 70px;
  font-weight: bold;
}

/* Search row column widths now come from the shared .column1..10 classes
   (same <table> as the header/data rows — see COLUMN WIDTHS — DATA ROWS
   below), so both rows are guaranteed to line up instead of drifting apart
   like they could when the search row lived in a separate <table>. */

/* ============================================================= */
/* COLUMN WIDTHS — DATA ROWS                                     */
/* ============================================================= */
.column1 { width: 30px; }                  /* Checkbox */
.column2 { width: 250px; }                 /* Viewed At — date, time and zone (the "(x ago)" part may be cut off) */
.column3 { width: 230px; }                 /* User — a full email */
/* column4 (Page Path) has no fixed width on purpose: in a fixed-layout table it takes all the space left over
   (e.g. when other columns are hidden), so it shows more of the path. */
.column5 { width: 100px; }                 /* Session ID */
.column6 { width: 120px; }                  /* IP address */
.column7 { width: 180px; }                 /* User Agent */
.column8 { width: 180px; }                 /* Referrer */
.column9 { width: 175px; }                 /* Query String */

/* ============================================================= */
/* MEDIUM WINDOWS: columns shrink with the window                */
/* ============================================================= */
/* The fixed pixel widths above add up to ~1265px, so once the window got narrower than that the Page Path column (which takes
   whatever is left over) hit 0 and the table spilled past the right edge, cutting off User Agent. Below 1600px the other columns
   use percentages instead, so they shrink with the window and Page Path keeps the leftover (about 24% of the table). Under 900px the
   phone rules below take over. */
@media (max-width: 1600px) {
  .column2 { width: 15%; }   /* Viewed At */
  .column3 { width: 14%; }   /* User */
  .column5 { width: 5%; }    /* Session ID */
  .column6 { width: 9%; }    /* IP address */
  .column7 { width: 15%; }   /* User Agent */
  .column8 { width: 10%; }   /* Referrer */
  .column9 { width: 9%; }    /* Query String */
}

/* ============================================================= */
/* RESPONSIVE: shrink columns, wrap on small screens             */
/* ============================================================= */
@media (max-width: 900px) {
  .pv_table {
    font-size: .8rem;
  }
  .pv_table th, .pv_table td {
    padding: .3rem .4rem;
  }

  /* Narrow window: wrap onto a couple of lines instead of forcing a
     horizontal scrollbar (the desktop default is nowrap + ellipsis). */
  .pv_table td {
    white-space: normal;
    word-wrap: break-word;
    overflow: visible;
    text-overflow: unset;
  }

  /* Search inputs */
  
  .searchcolumn2 input { max-width: 100%; } /* Viewed at */
  .searchcolumn3 input { max-width: 100%; }
  .searchcolumn4 input { max-width: 100%; }
  .searchcolumn5 input { max-width: 100%; }
  .searchcolumn6 input { max-width: 100%; }
  .searchcolumn7 input { max-width: 100%; }
  .searchcolumn8 input { max-width: 100%; }
  .searchcolumn9 input { max-width: 100%; }

  /* Data columns — narrower, and allowed to wrap (e.g. Viewed At's
     date + time lands on two lines instead of a fixed one-line width). */
  .column1 { width: 40px; }
  .column2 { width: 100px; }
  .column3 { width: 110px; }
  .column4 { width: 140px; }
  .column5 { width: 80px; }
  .column6 { width: 90px; }
  .column7 { width: 120px; }
  .column8 { width: 120px; }
  .column9 { width: 120px; }
}

@media (max-width: 600px) {
  .pv_table thead {
    display: none;
  }
  .pv_table tr {
    display: block;
    margin-bottom: 1rem;
    border: 1px solid #ddd;
    border-radius: 5px;
    background: white;
  }
  .pv_table td {
    display: block;
    text-align: right;
    position: relative;
    padding-left: 50%;
    white-space: normal;
  }
  .pv_table td::before {
    content: attr(data-label);
    position: absolute;
    left: 0;
    width: 45%;
    font-weight: bold;
    color: #0288d1;
  }

  /* Hide search row on mobile */
  .pv_search_row {
    display: none;
  }

}

/* Columns show/hide menu (same idea as admin Manage Users). */
.pv_toolbar { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; margin: 15px 0; }
.pv_toolbar .pv_bulk_actions_top { margin: 0; }
.pv_cols_menu { position: relative; margin: 0; text-align: right; }
.pv_cols_menu summary { cursor: pointer; font-weight: bold; padding: 2px 8px; display: inline-block; }
/* The open list drops down under the right-hand "Columns" label, lined up with its right edge. */
.pv_cols_panel { position: absolute; right: 0; top: 100%; z-index: 20; min-width: 220px; max-width: 92vw; text-align: left; background: #fff; border: 1px solid #bbb; border-radius: 8px; padding: 8px 12px; box-shadow: 0 4px 12px rgba(0,0,0,.2); }
.pv_ip_header { cursor: pointer; }
.pv_cols_list { display: flex; flex-wrap: wrap; gap: 6px 18px; padding: 8px 4px; }
.pv_cols_list label { font-weight: normal; white-space: nowrap; cursor: pointer; }

/* Page views by admin accounts: red-shaded row so they stand out (and can be skipped) at a glance. */
.pv_table tr.pv_row_admin td { background: #f8d0d0; }
.pv_table tr.pv_row_admin:hover td { background: #f2b8b8; }

/* ============================================================= */
/* NARROW BROWSER: columns shrink with the window, down to a floor */
/* ============================================================= */
/* The table switches from a fixed to an auto layout (above the phone card view) so the column widths above act as
   preferred widths that scale down together, but never below these minimums (in characters; the extra 1.2rem is
   the cell padding): Viewed At 15, User 14, Page Path 6, Session ID 8, IP / User Agent / Referrer / Query String 14 each.
   Below that, the page scrolls sideways. */
@media (min-width: 601px) {
  .pv_table { table-layout: auto; }
  .pv_table th { max-width: 0; overflow: hidden; text-overflow: ellipsis; }
  .pv_table td { overflow-wrap: anywhere; }
  /* Page Path (and Session ID) cells carry .pv_col_wrap, whose "word-wrap: break-word" beat the line above and stopped the column
     from ever being narrower than its longest path, so the columns to its right got pushed off the screen. "anywhere" lets a long
     path break so the column can shrink with the window. */
  .pv_table td.pv_col_wrap { overflow-wrap: anywhere; }
  .pv_table th.column2, .pv_table td.column2 { min-width: calc(15ch + 1.2rem); }
  .pv_table th.column3, .pv_table td.column3 { min-width: calc(14ch + 1.2rem); }
  .pv_table th.column4, .pv_table td.column4 { min-width: calc(6ch + 1.2rem); }   /* Page Path: it can be short, so it may shrink to make room for the others */
  /* A column that is switched ON in the Columns menu must stay readable: these used to shrink to 3 characters, which looked
     like the column was missing. Now the page (.pv_container) scrolls sideways instead when they don't all fit. */
  .pv_table th.column5, .pv_table td.column5 { min-width: calc(8ch + 1.2rem); }
  .pv_table th.column6, .pv_table td.column6 { min-width: calc(14ch + 1.2rem); }
  .pv_table th.column7, .pv_table td.column7,
  .pv_table th.column8, .pv_table td.column8,
  .pv_table th.column9, .pv_table td.column9 { min-width: calc(14ch + 1.2rem); }
}
/* Wide enough that cells stay on one line with "…": max-width 0 lets the text be cut instead of holding the column open. */
@media (min-width: 901px) {
  .pv_table td:not(.pv_col_wrap) { max-width: 0; }
}

/* The checkbox column must never collapse: the narrow/wide rules above give cells max-width 0 + overflow hidden,
   which squeezed this column to nothing and hid the row checkboxes. */
@media (min-width: 601px) {
  .pv_table th.column1, .pv_table td.column1 { min-width: 40px; width: 40px; max-width: none; overflow: visible; }
}

/* The "IP: … (N views) [−]" bar: keep the [−] right next to the IP text instead of floated to the far right edge, where a
   narrower window (the table getting wider than the screen and scrolling sideways) pushed it out of sight. Also never let
   the bar's cell be clipped or squeezed by the column rules above. */
.pv_table tr.pv_ip_header td { max-width: none; overflow: visible; text-overflow: clip; }
.pv_table tr.pv_ip_header .pv_collapse_icon { float: none; margin-left: 12px; }

/* Drag-to-resize column titles (user, 10/30). The grip is the right edge of each title; a light line shows on hover. */
.pv_table thead tr:first-child th { position: relative; }
.pv_resizer { position: absolute; top: 0; right: 0; width: 8px; height: 100%; cursor: col-resize; z-index: 2; }
.pv_resizer:hover, .pv_resizing .pv_resizer:hover { background: rgba(255, 255, 255, .55); }
body.pv_resizing { cursor: col-resize; user-select: none; }
.pv_reset_widths { background: #fff; color: #1a1a1a; border: 1px solid #999; border-radius: 6px; padding: 2px 10px; cursor: pointer; margin-left: auto; }
@media (max-width: 900px) { .pv_reset_widths { display: none; } }
.plans-page {
  /* Was a fixed 1100px, so the container stayed the same width no matter how
     wide the browser was. Now it grows with the viewport (still capped so it
     doesn't stretch absurdly wide on an ultra-wide monitor). */
  width: 100%;
  max-width: 1800px;
  margin: 0 auto;
  padding: 20px;
  box-sizing: border-box;
}

.plans-page h1 {
  text-align: center;
  margin-bottom: 6px;
}

.plans-tagline {
  text-align: center;
  color: #666;
  font-style: italic;
  margin-top: 0;
  margin-bottom: 24px;
}

.plans-admin-banner {
  background: #fff3cd;
  border: 1px solid #ffc107;
  color: #856404;
  border-radius: 8px;
  padding: 14px 20px;
  text-align: center;
  margin-bottom: 28px;
  font-size: 1.05em;
}

.plans-beta-banner {
  background: #d4edda;
  border: 1px solid #a3d9a5;
  color: #1a5c2a;
  border-radius: 8px;
  padding: 14px 20px;
  text-align: center;
  margin-bottom: 28px;
  font-size: 1.05em;
}

.plans-grid-wrap {
  position: relative;
}

.plans-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 20px;
  margin-bottom: 28px;
}

/* Shown via JS (see the inline script below the grid) only when the cards
   actually wrap to a second row — e.g. a half-width browser — so it's
   obvious there's more to see instead of it silently scrolling off. */
/* Kept fully inside .plans-grid-wrap's own box (never translated past its
   right edge) — the shared .clsBlueContainer this page sits in clips
   horizontal overflow (overflow-x: hidden), so anything positioned outside
   its bounds was getting silently cut off. */
.plans-more-hint {
  display: none;
  position: absolute;
  top: -34px;
  right: 4px;
  z-index: 2;
  flex-direction: row;
  align-items: center;
  gap: 4px;
  font-size: 0.85em;
  font-weight: bold;
  color: #007bff;
  line-height: 1.2;
  text-align: center;
  white-space: nowrap;
  animation: plans-more-hint-bounce 1.4s ease-in-out infinite;
}

.plans-more-arrow {
  font-size: 1.3em;
  line-height: 1;
}

@keyframes plans-more-hint-bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(5px); }
}

.plans-card {
  background: #fff;
  border: 2px solid #dde3ee;
  border-top: 6px solid var(--tier-accent, #dde3ee);
  border-radius: 12px;
  padding: 24px 20px;
  display: flex;
  flex-direction: column;
  transition: transform 0.15s, box-shadow 0.15s;
}

.plans-card:not(.plans-card--coming-soon):hover {
  transform: translateY(-4px);
  box-shadow: 0 6px 16px rgba(0, 123, 255, 0.15);
}

/* Pay-what-you-want amount picker on the Founding Supporter card. */
.plans-amount-form { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.plans-amount-row { display: flex; align-items: center; gap: 6px; font-weight: bold; }
.plans-amount-row input { width: 6em; padding: 6px 8px; font-size: 1.1em; text-align: right; }

.plans-card--current {
  background: #e6f9f0;
  border-color: #28a745;
  box-shadow: 0 0 0 3px rgba(40, 167, 69, 0.15);
}

.plans-card--beta.plans-card--current {
  background: #e6f9f0;
  border-color: #28a745;
  box-shadow: 0 0 0 3px rgba(40, 167, 69, 0.15);
}

.plans-card--coming-soon {
  opacity: 0.9;
  position: relative;
  overflow: hidden;
}

.plans-card--coming-soon::before {
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  width: 90px;
  height: 90px;
  background: repeating-linear-gradient(
    45deg,
    #ffe066 0 10px,
    #333 10px 20px
  );
  opacity: 0.15;
  clip-path: polygon(100% 0, 0 0, 100% 100%);
  pointer-events: none;
}

.plans-card-header {
  margin-bottom: 18px;
  text-align: center;
}

.plans-icon-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: var(--tier-accent, #007bff);
  font-size: 1.6em;
  margin-bottom: 10px;
  transition: transform 0.2s;
}

.plans-card:hover .plans-icon-badge {
  transform: scale(1.12) rotate(-6deg);
}

.plans-card-header h2 {
  margin: 0 0 6px;
  font-size: 1.3em;
}

.plans-card-subtitle {
  margin: 0 0 10px;
  font-size: 0.85em;
  color: #777;
  font-style: italic;
}

.plans-price {
  font-size: 1.6em;
  font-weight: bold;
  color: var(--tier-accent, #1a1a2e);
}

.plans-price span {
  font-size: 1em;
  font-weight: normal;
  color: #666;
}

.plans-features {
  list-style: none;
  padding: 0;
  margin: 0 0 20px;
  flex: 1;
}

.plans-features li {
  padding: 5px 0;
  padding-left: 20px;
  position: relative;
  color: #333;
  font-size: 1em;
}

.plans-features li::before {
  content: '✓';
  position: absolute;
  left: 0;
  color: #28a745;
  font-weight: bold;
}

.plans-card--coming-soon .plans-features li::before {
  color: #aaa;
}

/* Marks what THIS tier adds beyond the previous (cheaper) card in the grid —
   the "more you get" a shopper is scanning for when comparing tiers. */
.plans-features li.plans-feature--new {
  font-weight: bold;
  background: rgba(0, 0, 0, 0.05);
  border-left: 3px solid var(--tier-accent, #007bff);
  border-radius: 4px;
  margin: 0 -8px;
  padding-left: 25px;
  padding-right: 8px;
}

.plans-features li.plans-feature--new::before {
  content: '✨';
  color: var(--tier-accent, #007bff);
}

.plans-card--coming-soon .plans-features li.plans-feature--new::before {
  color: var(--tier-accent, #aaa);
}

.plans-cta {
  margin-top: auto;
  text-align: center;
}

/* .clsButton has a fixed height (see application.css) sized for one line of
   text — fine for short labels, but "Cancel Subscription" wraps to two lines
   on a narrow card and the second line was getting clipped. Let these
   buttons grow instead of clipping. */
.plans-cta .clsButton {
  height: auto;
  min-height: 40px;
  white-space: normal;
  line-height: 1.2;
}

.plans-current-label {
  display: inline-block;
  background: #007bff;
  color: #fff;
  border-radius: 20px;
  padding: 6px 16px;
  font-size: 1em;
  font-weight: bold;
}

.plans-card--beta .plans-current-label {
  background: #6f42c1;
}

.plans-cta-note {
  margin: 8px 0 0;
  font-size: 0.85em;
  color: #666;
}

.plans-coming-soon-label {
  display: inline-block;
  background: linear-gradient(135deg, #ffd166, #f5a623);
  color: #7a4a00;
  border-radius: 20px;
  padding: 6px 16px;
  font-size: 1em;
  font-weight: bold;
  box-shadow: 0 2px 6px rgba(245, 166, 35, 0.35);
}

.plans-coming-soon-emoji {
  display: inline-block;
  animation: plans-wobble 1.6s ease-in-out infinite;
}

@keyframes plans-wobble {
  0%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(-12deg); }
  75% { transform: rotate(12deg); }
}

.plans-coming-soon-caption {
  margin: 8px 0 0;
  font-size: 0.85em;
  color: #888;
  font-style: italic;
}

.plans-invite-note {
  display: block;
  font-size: 1em;
  color: #666;
  font-style: italic;
}

.plans-note {
  text-align: center;
  color: #888;
  font-size: 1em;
}

/* Phones: tighter, slightly smaller feature lists so each plan card isn't so tall (maintainer's request, 2026-10-07).
   Below the 15pt floor on purpose. TO REVERT: delete this block. */
@media (max-width: 699px) {
  /* Title on one line, less blank space above it. */
  .plans-page.clsBlueContainer { padding-top: 6px; }
  .plans-page h1 { margin-top: 0; margin-bottom: 4px; font-size: 1.25em; white-space: nowrap; }
  /* Room for the "More below ↴" hint, which is positioned just above the first card (it was overlapping the tagline). */
  .plans-tagline { margin-bottom: 32px; }
  .plans-more-hint { top: -28px; }
  /* Emoji badge and plan name on ONE line (🔍 Seeker, 🔥 Campfire, …), smaller badge. */
  .plans-card-header { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0 10px; }
  .plans-icon-badge { width: 38px; height: 38px; font-size: 1.2em; margin-bottom: 0; }
  .plans-card-header h2 { margin: 0; }
  .plans-card-header .plans-card-subtitle, .plans-card-header .plans-price { flex-basis: 100%; margin-top: 6px; margin-bottom: 4px; }
  .plans-features { margin-bottom: 12px; }
  .plans-features li { padding-top: 1px; padding-bottom: 1px; line-height: 1.25; font-size: 0.93em; }
}

/* Founding Supporter blurb: nudges people to pay a bit more than the minimum. */
.plans-support-note {
  margin: 0 0 14px;
  padding: 8px 12px;
  font-size: 0.95em;
  font-style: italic;
  color: #5a4300;
  background: rgba(245, 166, 35, 0.12);
  border-left: 3px solid var(--tier-accent, #f5a623);
  border-radius: 4px;
  text-align: left;
}

/* Phones: the page title and every button on the plans page are centered left to right (the buttons sit inside forms, which left-aligned
   them). TO REVERT: delete this block. */
@media (max-width: 800px) {
  .plans-page h1, .plans-page .plans-tagline { text-align: center !important; width: 100%; box-sizing: border-box; }
  .plans-page form, .plans-page .plans-cta, .plans-page .button_to { text-align: center; }
  .plans-page .clsButton, .plans-page input[type="submit"] { margin-left: auto; margin-right: auto; }
  .plans-page form .clsButton, .plans-page form input[type="submit"] { display: inline-flex; }
  .plans-page .plans-amount-row { justify-content: center; }
}
/* app/assets/stylesheets/privacy_policy.css
   Formal document look — this is a legal/policy page, not a "fun" page like
   Events, so it intentionally reads plainer: a clean white card, left-aligned
   body text (centered paragraphs of legal text read as unpolished), a real
   type hierarchy through h3 (the old version had none, falling back to the
   browser's default dark heading color sitting on a blue background — the
   "titles too dark to see" issue), and a proper bullet instead of an emoji. */
.privacy-container {
  max-width: 800px;
  margin: 40px auto;
  padding: 40px 48px;
  background: #ffffff;
  border: 1px solid #dde3ea;
  border-radius: 10px;
  box-shadow: 0 2px 12px rgba(11, 42, 91, 0.08);
  text-align: left;
  color: #2b2f36;
  line-height: 1.65;
}

.privacy-container h1 {
  font-size: 30px;
  color: #0b2a5b;
  text-align: center;
  margin: 0 0 20px;
  padding-bottom: 18px;
  border-bottom: 3px solid #0288d1;
}

.privacy-container h2 {
  font-size: 22px;
  color: #0b2a5b;
  margin: 34px 0 12px;
  padding-bottom: 6px;
  border-bottom: 1px solid #e3e8ee;
}

.privacy-container h3 {
  font-size: 17px;
  color: #01579b;
  margin: 22px 0 8px;
}

.privacy-container p {
  font-size: 15pt;
  color: #2b2f36;
  margin-bottom: 15px;
}

.privacy-container ul {
  list-style: none;
  padding: 0;
  margin: 0 0 20px;
}

.privacy-container ul ul {
  margin: 8px 0 0;
}

.privacy-container ul li {
  font-size: 15pt;
  color: #2b2f36;
  margin-bottom: 10px;
  padding-left: 24px;
  position: relative;
}

.privacy-container ul li:before {
  content: "";
  position: absolute;
  left: 4px;
  top: 0.65em;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #0288d1;
}

.privacy-container a {
  color: #0277bd;
  font-weight: 600;
}

.actions {
  display: flex;
  justify-content: center;
  margin-top: 20px;
}


.clsFlash.notice {
  background-color: #d4edda;
  color: #28a745;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

.clsFlash.alert {
  background-color: #f8d7da;
  color: #dc3545;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

@media (max-width: 600px) {
  .privacy-container {
    margin: 16px 12px;
    padding: 24px 20px;
  }
  .privacy-container h1 {
    font-size: 24px;
    padding-bottom: 14px;
  }
  .privacy-container h2 {
    font-size: 19px;
    margin: 26px 0 10px;
  }
  .privacy-container h3 {
    font-size: 16px;
  }
}
.quest-cross-table {
  width: 100%;
  border-collapse: collapse;
  text-align: left;
}
.quest-cross-table th,
.quest-cross-table td {
  padding: 10px;
  border: 1px solid #ddd;
  vertical-align: top;
  min-width: 120px;
  box-sizing: border-box;
}

.quest-cross-table td small {
  display: block;
}
p.summary {
  margin: 10px 0;
  padding: 10px;
  background-color: #e8f4f8;
  border-left: 4px solid #007bff;
  font-size: 15pt;
}
/* app/assets/stylesheets/question_request.css */
.question-request-container {
  max-width: 800px;
  margin: 60px auto;
  padding: 40px;
  background: linear-gradient(135deg, #007bff, #00ddeb);
  border-radius: 12px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  text-align: center;
}

.question-request-container h1 {
  font-size: 36px;
  color: #fff;
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
  margin-top: 0;
  margin-bottom: 20px;
}

.question-request-container p {
  font-size: 15pt;   /* ~20px — the intro/lead paragraph on these pages */
  color: #f0f8ff;
  margin-bottom: 20px;
}

.field {
  margin-bottom: 20px;
}

.field label {
  display: block;
  font-size: 15pt;
  color: #fff;
  margin-bottom: 5px;
}

.field input[type="text"],
.field select,
.field textarea {
  width: 100%;
  padding: 10px;
  font-size: 15pt;
  border: 1px solid #fff;
  border-radius: 8px;
  box-sizing: border-box;
}

.field input[type="text"]::placeholder,
.field select option,
.field textarea::placeholder {
  color: #aaaaaa;
}

.field input[type="text"]:focus,
.field select:focus,
.field textarea:focus {
  outline: none;
  border-color: #ffeb3b;
  box-shadow: 0 0 5px rgba(255, 235, 59, 0.3);
}

.actions {
  display: flex;
  justify-content: center;
  gap: 20px;
}

.clsBlueButton {
  background-color: #ff6f61;
  color: white;
  padding: 12px 24px;
  border: none;
  border-radius: 8px;
  font-size: 15pt;
  cursor: pointer;
  transition: background-color 0.3s;
}

.clsBlueButton:hover {
  background-color: #e55a4e;
}

.clsCancelButton {
  background-color: #6c757d;
}

.clsCancelButton:hover {
  background-color: #5a6268;
}

.clsFlash.notice {
  background-color: #d4edda;
  color: #28a745;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

.clsFlash.alert {
  background-color: #f8d7da;
  color: #dc3545;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

/* My Suggestions page (app/views/question_requests/index.html.erb) — three
   sections (Questions/Answers/Feedback), all inside the one page-level
   .question-request-container. Each section is its own bordered box nested
   inside that outer blue container, not just a divider line. */
.clsSuggestionsSection {
  margin-top: 20px;
  padding: 16px;
  border: 2px solid rgba(255, 255, 255, 0.6);
  border-radius: 10px;
}

.clsSuggestionsSection h2 {
  color: #fff;
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
  margin-top: 0;
  margin-bottom: 16px;
}

/* A white inner panel for the table itself — the dark status colors below
   (approved/rejected/pending) need a light background to stay readable,
   the same way the blue container's own text does the opposite. */
.clsSuggestionsPanel {
  background: #fff;
  border-radius: 8px;
  padding: 12px;
  overflow-x: auto;
}

.clsSuggestionsPanel table {
  width: 100%;
  border-collapse: collapse;
  color: #222;
}

.clsSuggestionsPanel th,
.clsSuggestionsPanel td {
  text-align: left;
  padding: 8px;
  border-bottom: 1px solid #eee;
}

.clsSuggestionsPanel th {
  border-bottom: 2px solid #ccc;
}
/* ===== Suggest a Question or Event page (2026-09-20) — scoped under
   .qr_clsSuggestPage (.question-request-container and .clsBlueButton above are
   shared by other pages, so nothing here may leak). Keeps the original
   blue-to-teal gradient container (matches the header/footer); only small touches
   are added: emoji, rounded white inputs, yellow pill button. ===== */
.qr_clsSuggestPage .qr_clsBigIcon { font-size: 40pt; line-height: 1; }

.qr_clsSuggestPage .field { text-align: left; }
.qr_clsSuggestPage .field label { font-weight: bold; }

.qr_clsSuggestPage .field input[type="text"],
.qr_clsSuggestPage .field select,
.qr_clsSuggestPage .field textarea {
  border-radius: 10px;
  color: #2b2b2b;
  background: #fff;
}

.qr_clsSuggestPage .actions .clsBlueButton {
  background: #ffd43b;
  color: #0b2a5b;
  font-weight: bold;
  border-radius: 25px;
  padding: 12px 32px;
  transition: transform 0.2s, background 0.2s;
}
.qr_clsSuggestPage .actions .clsBlueButton:hover {
  background: #ffe066;
  transform: scale(1.05);
}

/* ===== Suggest page — navy "camp fire" card + phone-first sizing (2026-10-05). Scoped to .qr_clsSuggestPage so the
   shared .question-request-container pages (My Suggestions, etc.) are untouched. The old 60px margin + 40px padding +
   36px title wasted most of a phone screen. To revert, delete from here down. ===== */
.qr_clsSuggestPage {
  margin: 20px auto;
  padding: 26px 22px;
  box-sizing: border-box;
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 70%, #0288d1 100%);
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
}
.qr_clsSuggestPage h1 { font-size: 24pt; line-height: 1.15; margin-bottom: 12px; }
.qr_clsSuggestPage > p { color: #e3f2fd; margin-bottom: 14px; line-height: 1.4; }
.qr_clsSuggestPage .field label { color: #ffe066; }
.qr_clsSuggestPage .field input[type="text"],
.qr_clsSuggestPage .field select,
.qr_clsSuggestPage .field textarea {
  min-height: 48px;
  border: 2px solid #90caf9;
  border-radius: 12px;
}
.qr_clsSuggestPage .field input[type="text"]:focus,
.qr_clsSuggestPage .field select:focus,
.qr_clsSuggestPage .field textarea:focus {
  border-color: #ffd43b;
  box-shadow: 0 0 0 4px rgba(255, 212, 59, 0.45);
}
.qr_clsSuggestPage .qr_clsPastLink {
  display: inline-block;
  padding: 8px 18px;
  color: #ffe066;
  text-decoration: none;
  font-weight: bold;
  border: 2px solid rgba(255, 224, 102, 0.7);
  border-radius: 999px;
}
.qr_clsSuggestPage .qr_clsPastLink:hover { background: rgba(255, 224, 102, 0.15); }
.qr_clsSuggestPage .actions .clsBlueButton { box-shadow: 0 0 14px rgba(255, 212, 59, 0.55); }

@media (max-width: 699px) {
  .qr_clsSuggestPage { margin: 6px 10px; padding: 18px 12px; }
  .qr_clsSuggestPage .qr_clsBigIcon { font-size: 30pt; }
  .qr_clsSuggestPage h1 { font-size: 18pt; }
  .qr_clsSuggestPage > p { font-size: 14pt; }
  .qr_clsSuggestPage .field { margin-bottom: 16px; }
  .qr_clsSuggestPage .field label { font-size: 14pt; }
  .qr_clsSuggestPage .actions { display: block; }
  .qr_clsSuggestPage .actions .clsBlueButton { width: 100%; box-sizing: border-box; min-height: 52px; }
}


/* Suggest page — event details (start / end) */
.qr_clsSuggestPage .qr_check { display: inline-flex; align-items: center; gap: 10px; margin: 0; cursor: pointer; }
.qr_clsSuggestPage .qr_check input[type="checkbox"] { width: 26px; height: 26px; accent-color: #ffd43b; }
.qr_clsSuggestPage .qr_event_fields {
  margin: 0 0 20px;
  padding: 14px;
  text-align: left;
  background: rgba(255, 255, 255, 0.12);
  border: 1px solid rgba(255, 255, 255, 0.35);
  border-radius: 14px;
}
.qr_clsSuggestPage .field input[type="datetime-local"] {
  width: 100%;
  min-height: 48px;
  padding: 10px;
  font-size: 15pt;
  color: #2b2b2b;
  background: #fff;
  border: 2px solid #90caf9;
  border-radius: 12px;
  box-sizing: border-box;
}
.qr_clsSuggestPage .qr_event_hint { margin: 0; font-size: 13pt; color: #e3f2fd; text-align: left; }

/* ===== My Suggestions page (2026-10-12) — scoped to .ms_*. A navy hero with a status summary, then each suggestion as a
   card. Cards stack naturally, so phones need no special table handling. Body text stays >= 14pt (docs/design.md). ===== */
/* Uses the room it is given: always 96% of the browser, up to 2200px, so the page and its long columns keep growing with it. */
.ms_page { max-width: min(2200px, 96vw); margin: 20px auto; padding: 0 14px 20px; box-sizing: border-box; }

.ms_hero {
  text-align: center;
  padding: 24px 18px 20px;
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 70%, #0288d1 100%);
  border-radius: 18px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
  color: #fff;
}
.ms_hero_icon { font-size: 40pt; line-height: 1; }
.ms_hero h1 { font-size: 24pt; margin: 4px 0 6px; color: #fff; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.25); }
.ms_hero p { font-size: 14pt; margin: 0 auto 14px; max-width: 560px; color: #e3f2fd; line-height: 1.45; }
.ms_chips { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 10px; }
.ms_chip { font-size: 13pt; padding: 3px 14px; border-radius: 999px; background: #fff; color: #14213d; font-weight: normal; }
.ms_chip strong { font-size: 1.1em; }
.ms_chip.ms_pending  { border: 2px solid #ffc107; }
.ms_chip.ms_approved { border: 2px solid #2e7d32; }
.ms_chip.ms_rejected { border: 2px solid #c62828; }

.ms_section { margin-top: 22px; }
.ms_section_head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 14px; margin-bottom: 10px; }
.ms_section_head h2 { margin: 0; font-size: 17pt; color: #0b2a5b; }
.ms_btn {
  display: inline-block; padding: 8px 20px; border-radius: 999px; background: #ffd43b; color: #0b2a5b !important;
  font-weight: bold; font-size: 13pt; text-decoration: none; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.18); transition: transform 0.15s;
}
.ms_btn:hover { transform: scale(1.04); text-decoration: none; }

.ms_card {
  background: #fff; border: 1px solid #d7ecfc; border-left: 8px solid #90a4ae; border-radius: 14px;
  padding: 12px 16px; margin: 0 0 12px; box-shadow: 0 2px 8px rgba(2, 136, 209, 0.10); text-align: left; color: #14213d;
}
.ms_card.ms_pending  { border-left-color: #ffc107; }
.ms_card.ms_approved { border-left-color: #2e7d32; }
.ms_card.ms_rejected { border-left-color: #c62828; }
.ms_card.ms_plain    { border-left-color: #0288d1; }
.ms_card_top { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 12px; margin-bottom: 6px; }
.ms_pill { display: inline-block; padding: 2px 12px; border-radius: 999px; font-weight: bold; font-size: 12pt; }
.ms_pill.ms_pending  { background: #fff3cd; color: #856404; border: 1px solid #ffc107; }
.ms_pill.ms_approved { background: #dcefe0; color: #155724; border: 1px solid #2e7d32; }
.ms_pill.ms_rejected { background: #fde8e8; color: #721c24; border: 1px solid #c62828; }
.ms_pill.ms_type     { background: #e3f2fd; color: #01579b; border: 1px solid #0288d1; }
.ms_meta { color: #607d8b; font-size: 12pt; }
.ms_title { font-size: 14pt; font-weight: bold; line-height: 1.4; overflow-wrap: anywhere; }
.ms_title a { color: #01579b; }
.ms_answer { margin-top: 4px; font-size: 14pt; }
.ms_comment { font-size: 14pt; line-height: 1.5; white-space: pre-line; overflow-wrap: anywhere; }
.ms_note { margin-top: 8px; padding: 8px 12px; background: #f1f8ff; border-left: 4px solid #0288d1; border-radius: 8px; font-size: 13pt; line-height: 1.45; }
.ms_empty { text-align: center; color: #546e7a; font-size: 14pt; background: #f7fbff; border: 2px dashed #b3d9f5; border-radius: 14px; padding: 16px; margin: 0; }

@media (max-width: 600px) {
  .ms_page { padding: 0 8px 16px; margin-top: 10px; }
  .ms_hero { padding: 18px 12px; }
  .ms_hero h1 { font-size: 20pt; }
  .ms_section_head h2 { font-size: 15pt; }
  .ms_btn { width: 100%; text-align: center; box-sizing: border-box; }
}

/* ----- My Suggestions: the sections as TABLES (scan the Status column at a glance), cards on a phone ----- */
.ms_table {
  width: 100%; border-collapse: separate; border-spacing: 0 6px; table-layout: auto;
}
.ms_table thead th {
  background: #0b2a5b; color: #fff; padding: 9px 12px; text-align: left; font-size: 12pt;
}
.ms_table thead th:first-child { border-radius: 10px 0 0 10px; }
.ms_table thead th:last-child  { border-radius: 0 10px 10px 0; }
.ms_table td {
  background: #fff; padding: 10px 12px; text-align: left; vertical-align: middle; font-size: 13pt; color: #14213d;
  border-top: 1px solid #d7ecfc; border-bottom: 1px solid #d7ecfc; overflow-wrap: anywhere;
}
.ms_table td:first-child { border-left: 8px solid #90a4ae; border-radius: 10px 0 0 10px; white-space: nowrap; }
.ms_table td:last-child  { border-right: 1px solid #d7ecfc; border-radius: 0 10px 10px 0; }
.ms_row.ms_pending  td:first-child { border-left-color: #ffc107; }
.ms_row.ms_approved td:first-child { border-left-color: #2e7d32; }
.ms_row.ms_rejected td:first-child { border-left-color: #c62828; }
.ms_row.ms_plain    td:first-child { border-left-color: #0288d1; }
.ms_row.ms_pending td { background: #fffdf3; }   /* what's still being worked on stands out a little */
.ms_notecell { color: #37474f; }

@media (max-width: 760px) {
  .ms_table, .ms_table tbody, .ms_table tr, .ms_table td { display: block; width: 100%; box-sizing: border-box; }
  .ms_table thead { display: none; }
  .ms_table { border-spacing: 0; }
  .ms_table tr {
    background: #fff; border: 1px solid #d7ecfc; border-left: 8px solid #90a4ae; border-radius: 14px; margin: 0 0 12px;
    box-shadow: 0 2px 8px rgba(2, 136, 209, 0.10); padding: 4px 0; overflow: hidden;
  }
  .ms_row.ms_pending  { border-left-color: #ffc107; background: #fffdf3; }
  .ms_row.ms_approved { border-left-color: #2e7d32; }
  .ms_row.ms_rejected { border-left-color: #c62828; }
  .ms_row.ms_plain    { border-left-color: #0288d1; }
  .ms_table td, .ms_table td:first-child, .ms_table td:last-child {
    border: none; border-radius: 0; background: transparent; padding: 5px 14px; white-space: normal;
  }
  .ms_table td[data-label]::before {
    content: attr(data-label); display: block; font-size: 0.75em; font-weight: bold; text-transform: uppercase;
    letter-spacing: 0.04em; color: #607d8b; margin-bottom: 1px;
  }
  .ms_table td[data-label="Status"]::before { display: none; }   /* the colored pill says it all */
}

/* My Suggestions: the status counts are a plain line of text (they used to be pill "chips", which looked clickable). */
.ms_summary { font-size: 14pt; color: #e3f2fd; margin: 0 auto !important; max-width: none !important; width: 100%; text-align: center; display: flex; flex-wrap: wrap; justify-content: center; gap: 4px 10px; }
.ms_summary strong { color: #ffe066; font-size: 1.15em; }
.ms_summary .ms_sep { color: #90caf9; }
@media (max-width: 600px) { .ms_summary .ms_sep { display: none; } .ms_summary span { flex-basis: 100%; } }

/* My Suggestions — which columns take the spare width: the wordy ones (Question, Team note, Comments, Your answer) grow as the
   browser gets wider; Status / Type / Submitted keep just enough room. Phones use the stacked cards instead (see above). */
@media (min-width: 761px) {
  .ms_table { table-layout: fixed; }
  .ms_c_status   { width: 17%; }
  .ms_c_type     { width: 9%; }
  .ms_c_when     { width: 18%; }
  .ms_c_question { width: 33%; }
  .ms_c_answer   { width: 20%; }
  .ms_c_note     { width: 23%; }
  .ms_c_comments { width: 65%; }
  .ms_table td:first-child { white-space: normal; }
}
@media (min-width: 1100px) { .ms_table td { font-size: 14pt; } }

/* Even wider browsers: Question (and the other wordy columns) take a bigger and bigger share, since the short ones don't need more. */
@media (min-width: 1400px) {
  .ms_c_status   { width: 13%; }
  .ms_c_type     { width: 7%; }
  .ms_c_when     { width: 15%; }
  .ms_c_question { width: 40%; }
  .ms_c_answer   { width: 22%; }
  .ms_c_note     { width: 25%; }
  .ms_c_comments { width: 78%; }
}

/* The Type pill (e.g. "Report comment", "Quest template"): two-word types may wrap onto two lines, but a word is never split
   in the middle — and the Type column is always wide enough for the longest single word. */
.ms_pill.ms_type { white-space: normal; overflow-wrap: normal; word-break: keep-all; hyphens: none; text-align: center; line-height: 1.25; }

/* Only the Feedback table's Type column is a bit wider (it holds two-word types like "Report comment"); the Questions and
   Answers tables keep their original column widths. */
@media (min-width: 761px) {
  .ms_t_feedback .ms_c_type { width: max(10%, 130px); }
}

/* My Suggestions tables: Status and Type are plain colored text now — the rounded, bordered "chips" looked like buttons you could
   press, and they're not. (The colored stripe on the left of each row still shows the status at a glance.) */
.ms_table .ms_pill {
  background: transparent !important; border: none !important; border-radius: 0; padding: 0;
  font-weight: bold; font-size: inherit; box-shadow: none;
}
.ms_table .ms_pill.ms_pending  { color: #856404; }
.ms_table .ms_pill.ms_approved { color: #155724; }
.ms_table .ms_pill.ms_rejected { color: #721c24; }
.ms_table .ms_pill.ms_type     { color: #01579b; text-align: left; }

/* Feedback table now has a Status column too — give it room, and keep its Type column as set above. */
.ms_table .ms_pill.ms_plain { color: #01579b; }
@media (min-width: 761px) {
  .ms_t_feedback .ms_c_status   { width: 22%; }
  .ms_t_feedback .ms_c_comments { width: 48%; }
  .ms_t_feedback .ms_c_when     { width: 18%; }
}

/* Feedback table sizing, take 2: let the browser size THIS table's columns from their content (auto layout), so nothing can overflow
   into its neighbour. Type shrinks to its longest word ("comment"), Status is moderate and wraps word by word as the browser narrows,
   and Comments takes whatever is left. (Questions / Answers tables are unchanged.) */
@media (min-width: 761px) {
  .ms_t_feedback { table-layout: auto; }
  .ms_t_feedback .ms_c_status   { width: 17%; }
  .ms_t_feedback .ms_c_type     { width: 1%; }
  .ms_t_feedback .ms_c_comments { width: auto; }
  .ms_t_feedback .ms_c_when     { width: 18%; }
}
.ms_t_feedback .ms_pill { white-space: normal; overflow-wrap: normal; word-break: normal; }

/* ----- My Suggestions on a phone: less white space (docs/design.md "Layout") -----
   Page wrapper full width (no vw units — they leave gutters under the phone zoom) with 10px sides, 10px under the menu bar,
   8px above the footer; tighter hero, section gaps and cards. TO REVERT: delete this block. */
@media (max-width: 800px) {
  .ms_page { max-width: none; margin: 10px 0 8px; padding: 0 10px; }
  .ms_page > :last-child, .ms_page > .ms_section:last-of-type { margin-bottom: 0; }
  .ms_hero { padding: 12px 10px 10px; border-radius: 16px; }
  .ms_hero_icon { font-size: 28pt; }
  .ms_hero h1 { font-size: 18pt; margin: 2px 0 4px; }
  .ms_hero p { margin-bottom: 8px; line-height: 1.35; }
  .ms_section { margin-top: 12px; }
  .ms_section_head { gap: 6px 10px; margin-bottom: 6px; }
  .ms_card { padding: 8px 10px; margin-bottom: 8px; }
  .ms_table tr { margin-bottom: 8px; padding: 2px 0; }
  .ms_table td, .ms_table td:first-child, .ms_table td:last-child { padding: 3px 10px; }
  .ms_empty { padding: 10px; }
}

/* ----- My Suggestions: section titles stand out as headers (a light-blue band with a navy edge, bigger bold navy title) ----- */
.ms_section_head {
  background: #d6ecfb; border-left: 8px solid #0b2a5b; border-radius: 10px; padding: 8px 14px; margin-bottom: 10px;
}
.ms_section_head h2 { font-size: 20pt; font-weight: bold; color: #0b2a5b; }
@media (max-width: 800px) {
  .ms_section_head { padding: 6px 10px; margin-bottom: 6px; }
  .ms_section_head h2 { font-size: 16pt; }
}

/* Suggest a Question + My Suggestions on a phone: the buttons are a normal size, centered, and stay inside the screen.
   They had been made 100% wide while the shared .clsButton also carries a 10px margin, so they ran off the right edge.
   TO REVERT: delete this block. */
@media (max-width: 800px) {
  .qr_clsSuggestPage .actions { display: flex; justify-content: center; gap: 10px; }
  .qr_clsSuggestPage .actions .clsBlueButton {
    width: auto; max-width: 100%; min-width: 180px; min-height: 46px; margin: 6px auto; padding: 8px 24px; box-sizing: border-box;
  }
  .ms_btn { width: auto; max-width: 100%; box-sizing: border-box; padding: 7px 18px; }
}

/* Phone: SMALL buttons, centered left-to-right, never wider than the screen (Suggest a Question + My Suggestions).
   !important on purpose — earlier rules kept winning. TO REVERT: delete this block. */
@media (max-width: 800px) {
  /* My Suggestions: each section header stacks — title, then its button centered underneath. */
  .ms_page .ms_section_head { flex-direction: column !important; align-items: center !important; text-align: center; }
  .ms_page .ms_section_head h2 { text-align: center; }
  .ms_page .ms_section_head .ms_btn {
    width: auto !important; max-width: 70% !important; min-width: 0 !important; margin: 0 auto !important; box-sizing: border-box !important;
    padding: 5px 10px !important; font-size: 11pt !important; line-height: 1.2;
  }
  /* Suggest a Question: the send button and the "See my past suggestions" link. */
  .qr_clsSuggestPage .actions { display: flex !important; justify-content: center !important; }
  .qr_clsSuggestPage .actions .clsBlueButton, .qr_clsSuggestPage .actions button {
    width: auto !important; min-width: 0 !important; max-width: 70% !important; min-height: 0 !important; height: auto !important;
    margin: 4px auto !important; padding: 6px 12px !important; font-size: 12pt !important; box-sizing: border-box !important;
  }
  .qr_clsSuggestPage .qr_clsPastLink { padding: 5px 10px !important; font-size: 11pt !important; max-width: 70%; box-sizing: border-box; }
}

/* Show / hide button in each My Feedback section heading (user, 11/2). Solid white button, dark blue text, on the light blue heading bar.
   TO REVERT: delete this block. */
.ms_toggle {
  background: #fff; color: #0b2a5b; border: 2px solid #0b2a5b; border-radius: 999px; padding: 6px 16px;
  font-size: 13pt; font-weight: bold; cursor: pointer;
}
.ms_toggle:hover { background: #eaf4fd; }
.ms_body[hidden] { display: none; }

/* assets/stylesheets/questions.css */

.category {
  font-size: 1.1em;
  font-weight: bold;
  margin-bottom: 10px;
}

.completion-popup {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
  padding: 2rem;
  border-radius: 16px;
  text-align: center;
  box-shadow: 0 10px 30px rgba(0,0,0,0.3);
  max-width: 500px;
  margin: 2rem auto;
  font-family: 'Segoe UI', sans-serif;
}

.completion THESE h2 {
  margin: 0 0 1rem 0;
  font-size: 2.2rem;
}

.completion-popup p {
  margin: 0.8rem 0;
  font-size: 1.2rem;
  opacity: 0.95;
}

.clsCenteredButton {
  display: block;
  margin-left: 0; /* Ensure left alignment */
  margin-right: 0;
}

.form-input {
  box-sizing: border-box; /* Ensure padding doesn't affect width */
  border: 1px solid #ddd;
  border-radius: 5px;
  padding: 8px;
  margin: 8px;
}

.form-input:focus {
  outline: none;
  border-color: #0288d1;
  box-shadow: 0 0 5px rgba(2, 136, 209, 0.3);
}

.questions-container {
  background-color: #e3f2fd;
  border-radius: 10px;
  padding: 20px;
  margin: 20px auto;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
  text-align: center;
}

/* Override the shared .an_clsAnswerCardContainer 700px cap so this page's
   card centers itself but stretches further on a wide browser window. */
.question-container.an_clsAnswerCardContainer {
  max-width: 1100px;
  width: 100%;
  margin: 20px auto;
}

/* "Because you answered…" context line — mirrors the Android app's My
   Questions screen (QuestionAdapter#bindParentContext). Blue when the
   question is a follow-up, muted gray for a top-level question. */
.parent-context {
  font-size: 0.85em;
  line-height: 1.3;
  color: #0288d1;
  margin: 0 0 8px 0;
}

.parent-context-top-level {
  color: #777;
}

.parent-context-link {
  color: #01579b;
  font-weight: bold;
  margin-left: 4px;
}

/* Banner shown when a specific (possibly already-answered) question was
   force-loaded via "tap to change" — see QuestionsController#reanswer. */
.reanswer-banner {
  font-size: 0.85em;
  background-color: #fff8e1;
  border: 1px solid #f0c14b;
  border-radius: 6px;
  padding: 6px 10px;
  margin: 0 0 10px 0;
}

.reanswer-current-answer {
  font-size: 0.9em;
  color: #555;
  margin: 0 0 6px 0;
}

.question-container h2 {
  font-size: 1.5em;
  margin: 10px 0;
}

.question-container p {
  margin: 5px 0;
}

.question-form {
  margin-top: 15px;
  display: block; /* Remove flex to simplify alignment */
}







.yes-no-buttons {
  gap: 10px;
  margin: 15px 0;
}

/* Combined with .clsButton for higher specificity — application.css's own
   .clsButton rule compiles in last (require_self runs after require_tree)
   and would otherwise win the height/padding/font-size tie at equal
   specificity. */
.yes-no-buttons .clsButton {
  height: 48px;
  padding: 10px 26px;
  font-size: 1.1em;
}

.clsCenteredLink {
  display: block;
  text-align: center;
}
/* My Questions, on EVERY screen size (it used to be phones only, so a laptop still got a scroll-box inside the page): no scroll-box inside the page.
   The shared .clsBlueContainer sets overflow-x: hidden, which browsers turn into overflow-y: auto — so this page's outer blue
   container became its own little scroller inside the page scroller, and touch-scrolling got caught in it. "clip" still cuts off
   anything that sticks out sideways, but doesn't make a scroll container. TO REVERT: delete this block. */
.questions-container.clsBlueContainer {
  overflow-x: clip;
  overflow-y: visible;
}

/* My Questions on a phone: much less white space above and below the page title. TO REVERT: delete this block. */
@media (max-width: 800px) {
  .questions-container.clsBlueContainer { padding-top: 4px; padding-bottom: 8px; }
  .questions-container.clsBlueContainer > h1 { margin: 2px 0 4px; }
  .questions-container.clsBlueContainer > h1 + p { margin: 0 0 6px; }
}

/* My Questions on a phone: Yes / No / Skip sit in one centered row at a comfortable size — not stretched across the screen.
   TO REVERT: delete this block. */
@media (max-width: 800px) {
  .yes-no-buttons {
    display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 10px; margin: 10px 0;
  }
  .yes-no-buttons .clsButton {
    flex: 0 0 auto; width: auto; min-width: 84px; height: 42px; min-height: 42px; padding: 6px 18px; font-size: 1.05em; margin: 0;
  }
}

/* My Questions on a phone: the "Continue finding your tribe…" line a little smaller. TO REVERT: delete this block. */
@media (max-width: 800px) {
  .questions-container.clsBlueContainer > h1 + p.app_clsCenterText { font-size: 0.85em; line-height: 1.3; }
}

/* My Questions on a phone: a slightly smaller page title (site default is 1.8em). TO REVERT: delete this block. */
@media (max-width: 800px) {
  .questions-container.clsBlueContainer > h1 { font-size: 1.45em; }
}

/* My Questions on a phone: dragging a finger sideways must not slide the page. The page can't scroll sideways at all
   (anything poking out — the corner sparkles, the glow — is cut off), and horizontal finger drags are ignored; up/down scrolling
   and pinch-zoom still work. TO REVERT: delete this block. */
@media (max-width: 800px) {
  html:has(.questions-container), body:has(.questions-container) { overflow-x: hidden; max-width: 100%; }
  body:has(.questions-container), .questions-container, .questions-container * { touch-action: pan-y pinch-zoom; }
}

/* My Questions on a phone: a smaller title, and the two buttons at the bottom ("Suggest a Question", "My Suggestions") small and
   side by side in the middle — not wide. !important because older shared button rules kept winning. TO REVERT: delete this block. */
@media (max-width: 800px) {
  .questions-container.clsBlueContainer > h1 { font-size: 1.3em; }
  .q_bottom_links { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 6px; margin: 10px 8px 0 !important; }
  .q_bottom_links .clsButton {
    width: auto !important; min-width: 0 !important; max-width: 48% !important; min-height: 0 !important; height: auto !important;
    margin: 0 !important; padding: 6px 10px !important; font-size: 10.5pt !important; line-height: 1.2; box-sizing: border-box !important;
  }
}

/* My Questions on a phone: almost no white space under the two bottom buttons (the two <br> line breaks after them are hidden,
   leaving the 8px gap above the footer from docs/design.md). TO REVERT: delete this block. */
@media (max-width: 800px) {
  .q_bottom_links { margin-bottom: 8px !important; }
  .q_bottom_links + br, .q_bottom_links + br + br { display: none; }
}

/* My Questions on a phone: less space before and after the 🚩 Report button (above it, and under it to the bottom of the question
   card). TO REVERT: delete this block. */
@media (max-width: 800px) {
  .q_report_row { margin: 8px 0 0 !important; }
  .question-container.an_clsAnswerCardContainer.clsBlueContainer { padding-bottom: 10px; margin-bottom: 10px; }
}

/* My Questions on a phone: the "Continue finding your tribe…" line, one more teensy step smaller (was 0.85em). TO REVERT: delete this block. */
@media (max-width: 800px) {
  .questions-container.clsBlueContainer > h1 + p.app_clsCenterText { font-size: 0.78em; }
}

/* My Questions: much less white space between the top of the question card and the "Top-Level Question" / "Because you answered…"
   line (the card had 30px of top padding, plus the paragraph's own top margin). TO REVERT: delete this block. */
.question-container.an_clsAnswerCardContainer.clsBlueContainer { padding-top: 10px; }
.question-container.an_clsAnswerCardContainer .parent-context { margin-top: 0; }

/* Event questions: a bright date banner above the question and a yellow reminder chip above the answer buttons. TO REVERT: delete this block. */
.q_event_banner {
  margin: 0 0 8px; padding: 8px 14px; border-radius: 12px; text-align: center; font-weight: bold; font-size: 1.05em; line-height: 1.3;
  color: #fff; background: linear-gradient(135deg, #e8590c, #f08a00); box-shadow: 0 2px 6px rgba(232, 89, 12, 0.35);
}
.q_event_tag { display: inline-block; margin-right: 4px; padding: 0 8px; border-radius: 999px; background: #fff; color: #c2410c; font-size: 0.78em; letter-spacing: 0.04em; }
.q_event_chip {
  margin: 10px auto 4px; padding: 6px 12px; border-radius: 12px; text-align: center; max-width: 95%;
  background: #fff3a3; border: 2px solid #f5b301; color: #5a4300;
}
/* QuickPick — mobile-first: one column of cards, big tap targets (44px+), no horizontal scroll. */
.qp_container { max-width: 800px; margin: 0 auto; padding: 12px; box-sizing: border-box; }
.qp_container *, .qp_container *::before, .qp_container *::after { box-sizing: border-box; }
.qp_back { margin: 6px 0; }

.qp_hero {
  text-align: center; margin: 8px 0 16px; padding: 18px 14px; border-radius: 20px;
  background: linear-gradient(135deg, #01579b 0%, #0288d1 100%); color: #fff;
  box-shadow: 0 4px 14px rgba(1, 87, 155, 0.3);
}
.qp_hero_emoji { font-size: 2.4em; line-height: 1; }
.qp_hero h1 { margin: 6px 0 4px; color: #ffd600; font-size: 1.7em; overflow-wrap: anywhere; }
.qp_current_search_name { font-size: 1.15em; font-weight: bold; margin: 6px 0; color: #fff; overflow-wrap: anywhere; }
.qp_hero_sub { margin: 6px auto 0; max-width: 560px; opacity: 0.95; }

.qp_search_container {
  background: #fff; padding: 16px; border-radius: 20px; margin-bottom: 16px;
  border: 3px solid #0288d1; box-shadow: 0 4px 12px rgba(0,0,0,0.10);
}
.qp_search_form { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; }
.qp_field { flex: 1 1 240px; min-width: 0; }
.qp_field label { display: block; margin-bottom: 6px; font-weight: bold; color: #01579b; }
.qp_field input[type="text"] {
  width: 100%; height: 48px; padding: 8px 14px; border: 2px solid #b3d9f5; border-radius: 14px; font-size: 16px; /* 16px stops iOS zoom */
}
.qp_field input[type="text"]:focus { outline: none; border-color: #0288d1; box-shadow: 0 0 0 3px rgba(2,136,209,0.2); }
.qp_actions { display: flex; gap: 10px; }
.clsButton.qp_search_btn {
  height: 48px; margin: 0; padding: 0 24px; font-size: 1.05em; line-height: 48px; border-radius: 999px; white-space: nowrap; text-align: center;
}

.qp_ideas { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 14px; }
.qp_ideas_label { font-weight: bold; color: #666; font-size: 0.9em; }
.qp_idea {
  display: inline-flex; align-items: center; min-height: 40px; padding: 6px 14px; border-radius: 999px;
  background: #f3faff; border: 2px solid #b3d9f5; color: #01579b; font-weight: bold; text-decoration: none;
  transition: transform 0.1s, background 0.1s;
}
.qp_idea:hover { transform: scale(1.06); background: #e3f2fd; text-decoration: none; }

.qp_found { margin: 10px 4px; }
.qp_results { display: flex; flex-direction: column; gap: 14px; }
.qp_card {
  display: flex; align-items: center; gap: 12px; padding: 14px; border-radius: 20px; background: #fff;
  border: 3px solid var(--qp-accent, #0288d1); box-shadow: 0 4px 12px rgba(0,0,0,0.10);
  transition: transform 0.15s, box-shadow 0.15s;
}
.qp_card:hover { transform: translateY(-3px); box-shadow: 0 8px 20px rgba(0,0,0,0.16); }
.qp_card_icon {
  flex: 0 0 auto; width: 52px; height: 52px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  font-size: 1.8em; background: var(--qp-tint, #e3f2fd);
}
.qp_card_body { flex: 1 1 auto; min-width: 0; }
.qp_card_question { margin: 0; font-size: 1.1em; font-weight: bold; line-height: 1.35; color: #14213d; overflow-wrap: anywhere; }
.qp_card_cat { display: inline-block; margin-top: 4px; font-size: 0.75em; font-weight: bold; color: var(--qp-accent, #0288d1); text-transform: uppercase; letter-spacing: 0.04em; }
.qp_pick {
  flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; min-height: 48px; padding: 0 20px;
  border-radius: 999px; background: var(--qp-accent, #0288d1); color: #fff; font-weight: bold; text-decoration: none; white-space: nowrap;
  transition: transform 0.1s;
}
.qp_pick:hover { transform: scale(1.06); color: #fff; text-decoration: none; }

.qp_no_results { color: #555; text-align: center; font-size: 1.05em; margin: 20px 0; }
.qp_container code { background: #eef3f8; padding: 1px 6px; border-radius: 6px; }

/* Phones: stack the card — icon + question on top, full-width button underneath */
@media (max-width: 600px) {
  .qp_container { padding: 8px; }
  .qp_hero h1 { font-size: 1.45em; }
  .qp_search_form { flex-direction: column; align-items: stretch; }
  .qp_field { flex: none; }
  .qp_actions .qp_button { flex: 1 1 0; padding: 0 10px; }
  .qp_card { flex-wrap: wrap; }
  .qp_card_body { flex: 1 1 calc(100% - 70px); }
  .qp_pick { flex: 1 1 100%; }
}


/* Thumbs up / down + admin-only priority number */
.qp_card_actions { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; }
.qp_votes { display: flex; gap: 6px; }
.qp_vote {
  width: 46px; height: 46px; border-radius: 50%; border: 2px solid #c9d6e2; background: #fff; font-size: 1.3em; line-height: 1;
  cursor: pointer; transition: transform 0.1s, background 0.1s; padding: 0;
}
.qp_vote:hover:not(:disabled) { transform: scale(1.12); background: #f3faff; }
.qp_vote:disabled { opacity: 0.45; cursor: default; }
.qp_vote.qp_vote_chosen { opacity: 1; background: var(--qp-tint, #e3f2fd); border-color: var(--qp-accent, #0288d1); }
.qp_card.qp_removing { opacity: 0; transform: scale(0.96); transition: opacity 0.25s, transform 0.25s; }
.qp_admin_priority {
  display: inline-block; margin: 6px 0 0 8px; padding: 2px 10px; border-radius: 8px; font-size: 0.8em;
  background: #ffcdd2; border: 2px solid #c62828; color: #b71c1c; font-weight: bold;
}
@media (max-width: 600px) {
  .qp_card_actions { flex: 1 1 100%; }
  .qp_card_actions .qp_pick { flex: 1 1 auto; }
}

.qp_admin_edit {
  display: inline-block; margin: 6px 0 0 8px; padding: 2px 12px; border-radius: 999px; font-size: 0.8em; font-weight: bold;
  background: #ffcdd2; border: 2px solid #c62828; color: #b71c1c; text-decoration: none;
}
.qp_admin_edit:hover { background: #ef9a9a; text-decoration: none; }

.qp_admin_toast {
  position: fixed; left: 50%; bottom: 24px; transform: translate(-50%, 20px); z-index: 2000;
  max-width: calc(100vw - 32px); padding: 12px 20px; border-radius: 14px; font-weight: bold; text-align: center;
  background: #ffcdd2; border: 3px solid #c62828; color: #b71c1c; box-shadow: 0 6px 18px rgba(0,0,0,0.25);
  opacity: 0; pointer-events: none; transition: opacity 0.2s, transform 0.2s;
}
.qp_admin_toast.qp_admin_toast_show { opacity: 1; transform: translate(-50%, 0); }
.qp_admin_toast_question { margin-top: 4px; font-weight: normal; font-size: 0.9em; font-style: italic; }

/* Members' "✕ Hide" (replaces the admin-only thumbs): a labelled pill instead of a square emoji button. */
.qp_vote.qp_vote_hide { width: auto; height: auto; min-height: 40px; padding: 4px 14px; font-size: 1em; font-weight: bold; border-radius: 999px; }
/* Camp Fire page title: smaller than the site-wide h1 (2026-10-07).
   `.question-request-container h1 { font-size: 36px }` (question_request.css) is more specific than a lone class,
   which is why the earlier version of this rule did nothing — so this repeats the container class. */
.question-request-container h1.rm_title { font-size: 26px; line-height: 1.25; margin-bottom: 12px; }
@media (max-width: 800px) {
  .question-request-container h1.rm_title { font-size: 22px; line-height: 1.25; margin-bottom: 8px; }
  /* Phones: the Camp Fire page's box starts higher and has less blank space above the "All Camp Fires" row. */
  .question-request-container.rooms-page-container { margin-top: 6px !important; padding-top: 8px !important; }
  /* The yellow "🔥 At the fire now … 🔔 Keeping a chair" box: a little wider, same amount more on each side so it stays centred. */
  #roomPresenceBox, .rm_wide { margin-left: -12px !important; margin-right: -12px !important; }   /* the panels and the Got an idea button are as wide as the yellow box too */
}

/* ===== Camp Fire page on a phone (2026-10-12) ===== Less indenting so replies keep their width, the topic / reply boxes span the
   whole width with the button underneath, long words wrap, and the rest of the page's flex panels stack on their own. */
@media (max-width: 699px) {
  .rm_topic_asker   { margin-left: 6px !important; font-size: 13pt !important; }
  .rm_topic_replies { margin-left: 8px !important; padding-left: 8px !important; }
  #new_topic_prompt, textarea.rm_reply_box { width: 100% !important; margin-left: 0 !important; display: block; }
  #new_topic_prompt ~ button, textarea.rm_reply_box ~ button { margin-top: 6px; }
  #new_topic_prompt ~ button { display: block; margin-left: auto; margin-right: auto; }   /* the Post button, centred left to right */
  section[id^="topic-"], #campfire_questions, p[id^="message-"], div[id^="message-"] { overflow-wrap: anywhere; word-break: break-word; }
  section[id^="topic-"] { padding: 10px !important; }
  .cfq_row { padding: 8px 10px !important; }
  .cfq_row .rsvp-link, .cfq_row .clsButton { white-space: normal; }
  dialog { max-width: 94vw; }
}


/* Show/hide wrappers for the long explanations on the Camp Fire page (the words are all still there — just folded away). */
.rm_more summary { cursor: pointer; color: #0a58ca; font-weight: bold; font-size: 0.9em; }
.rm_more[open] summary { margin-bottom: 4px; }
.rm_one_line > summary { white-space: nowrap; }   /* the show/hide label itself stays on one line */
/* On wide/full-screen browsers the default .clsBlueContainer 20px side margin
   leaves a lot of unused space on this page — shrink the margin proportionally
   as the viewport grows so the box actually widens on full-screen monitors. */
@media (min-width: 700px) {
  .sn_search-name-container {
    margin-left: 4vw;
    margin-right: 4vw;
  }
}

.sn_new-search-form-wrapper {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.2em;
  margin: 2em 0;
  width: 100%;
}

.sn_new-search-label {
  font-size: 1.2em;
  font-weight: 600;
}

.sn_new-search-input {
  width: 540px;
  max-width: 90%;
  padding: 0.8em 1em;
  font-size: 1.1em;
  border: 1px solid #ccc;
  border-radius: 6px;
  box-sizing: border-box;
}

.sn_new-search-button-wrapper {
  margin-top: 0.5em;
}

.sn_new-search-submit:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* "Let's Go →" — a bit bigger than the default 40px button, with the text centered
   top to bottom (the default 10px vertical padding left the label sitting low in an
   <input>, so use an explicit height with no vertical padding instead). */
.clsButton.sn_new-search-submit {
  height: 54px;
  padding: 0 36px;
  font-size: 1.25em;
  line-height: 54px;
}
.so_search-options-page {
  text-align: center;
  padding: 20px;
}

.so_search-options-page h1 {
 
  font-size: 2.5em;
  margin-bottom: 10px;
}

.so_search-options-page p {
  margin-bottom: 20px;
}

.so_search-options-container {
  display: flex;
  justify-content: center;
  gap: 30px;
  margin: 30px 0;
}

.so_search-option {
  flex: 1;

}

.so_clsFunButton {
  display: inline-block;
  padding: 15px 30px;
  font-size: 1.2em;
  text-decoration: none;
  border-radius: 10px;
  transition: transform 0.2s, box-shadow 0.2s;
}

.so_clsFunButton:hover {
  transform: scale(1.05);
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}

.so_clsAdvancedButton-autumn {
  background-color: #4682B4;
  color: #F5F5DC;
}

.so_clsQuickPickButton-autumn {
  background-color: #D4A017;
  color: #F5F5DC;
}

.so_clsGuidedButton-autumn {
  background-color: #556B2F;
  color: #F5F5DC;
}

.so_search-option p {
  font-size: 20px;
  margin-top: 10px;
}

.so_search-options-page h2 {
  font-size: 1.8em;
  color: inherit; /* Ensures the main text uses the default color, not yellow */
  margin: 20px 0;
}

.so_search-options-page h2 i {
  /* The search name the user typed: dark text on a soft yellow highlight — bright yellow text
     was nearly invisible on the light-blue page background. */
  display: inline-block;
  margin-top: 6px;
  padding: 2px 14px;
  border-radius: 10px;
  background: #ffe066;
  color: #0b2a5b;
  font-weight: bold;
}
/* app/assets/stylesheets/searches.css */

.clsCriterion {
  display: flex;
  gap: 10px;
  margin: 10px 0;
  align-items: center;
}

.s_clsCboCategoryID {
  max-width: 175px;
}

.s_clsCboQuestionID {
  flex: 2;
  min-width: 200px;
  max-width: 400px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  box-sizing: border-box;
}

.s_clsCboQuestionID option {
  white-space: normal;
}

.s_clsCboAnswer {
  width: 100px;
  }

  .s_clsCboPriority {
  width: 100px;
  }

.s_clsSearchesDivSearchContainer {
  display: flex;
  justify-content: space-between;
}

.s_clsDivSearchMain {
  flex: 3;
  padding-right: 20px;
}

.s_clsDivListSavedSearches {
  flex: 0 1 100px;
  max-width: 200px;
  padding-left: 10px;
  border-left: 1px solid #ccc;
}


select, input[type="text"] {
  padding: 8px;
  border-radius: 5px;
  border: 1px solid #ccc;
}




.s_clsRemoveCriterion {
  color: #d81b60;
  text-decoration: none;
  font-weight: bold;
}

.s_clsRemoveCriterion:hover {
  color: #a11245;
}

.s_clsDivFormActions {
  margin: 20px 0;
  display: flex;
  align-items: center;
  gap: 10px;
}

.inline-form {
  display: flex;
  align-items: center;
  gap: 10px;
}

.inline-label {
  margin-right: 5px;
}

.inline-input {
  padding: 8px;
  border-radius: 5px;
  border: 1px solid #ccc;
  width: 150px;
}



.edit-search-link {
  color: #0288d1;
  text-decoration: none;
  margin-left: 10px;
  font-size: 1em;
}

.edit-search-link:hover {
  color: #01579b;
  text-decoration: underline;
}

.answer-yes { color: #008000; }
.answer-no { color: #ff0000; }
.answer-unanswered { color: #ff8c00; }
.answer-na { color: #666666; }
.answer-skipped { color: #800080; }

.match {
  background-color: #00cc00; /* Green background */
  color: #ffffff; /* White text */
  border-radius: 8px; /* Rounded corners */
  padding: 4px 8px; /* Padding for better appearance */
  display: inline-block; /* Ensures the background wraps the text */
}

/* the individual questions */
.answer-matched {
  color: #008000; /* Green */
}
.answer-unmatched {
  color: #ff0000; /* Red */
}
.answer-unanswered {
  color: #ff8c00; /* Orange */
}
.zero-match {
  background-color: #ff0000; /* Red background */
  color: #ffffff; /* White text */
  border-radius: 8px; /* Rounded corners */
  padding: 4px 8px; /* Padding for better appearance */
  display: inline-block; /* Ensures the background wraps the text */
}

ul {
  list-style-type: none; /* Removes bullet points for all list items */
}

@media (max-width: 800px) {
  
  .s_clsSearchesDivSearchContainer {
    flex-direction: column;
    padding: 10px;
  }
  .s_clsDivSearchMain, .UserSearches {
    padding: 0;
    border: none;
  }
 
  select {
    width: 100%;
    max-width: none;
  }
  .s_clsDivFormActions {
    flex-direction: column;
    align-items: stretch;
  }
  .inline-form {
    flex-direction: column;
    align-items: stretch;
  }
  .inline-input {
    width: 100%;
  }
}


.saved-searches-list {
  list-style: none;
  padding-left: 0;
  margin: 1em 0;
}

.saved-search-item {
  margin-bottom: 0.8em;
  font-size: 1.1em;
}

/* The Go Live button gently pulses while a quest isn't live yet, so it stands out — going live is what
   unlocks Connect and Nudge (user, 10/26). Still for anyone who has asked their device for less motion. */
.clsGoLivePulse { animation: clsGoLivePulse 1.6s ease-in-out infinite; }
@keyframes clsGoLivePulse {
  0%, 100% { transform: scale(1);    box-shadow: 0 0 0 0 rgba(42, 140, 140, 0.55); }
  50%      { transform: scale(1.07); box-shadow: 0 0 0 10px rgba(42, 140, 140, 0); }
}
@media (prefers-reduced-motion: reduce) { .clsGoLivePulse { animation: none; } }
/* app/assets/stylesheets/terms_of_service.css
   Same formal-document treatment as privacy_policy.css — this and the
   Privacy Policy are a matched pair of legal pages, so they should look
   consistent with each other, not "fun" like Events. Fixes here: <ul>/<li>
   had no color/alignment rules at all, so bullet text fell back to the
   browser's default black-on-blue-gradient (hard to read) and inherited the
   container's center alignment (bullet lists centered, reads oddly); plus no
   mobile spacing at all before this. */
.terms-container {
  max-width: 800px;
  margin: 40px auto;
  padding: 40px 48px;
  background: #ffffff;
  border: 1px solid #dde3ea;
  border-radius: 10px;
  box-shadow: 0 2px 12px rgba(11, 42, 91, 0.08);
  text-align: left;
  color: #2b2f36;
  line-height: 1.65;
}

.terms-container h1 {
  font-size: 30px;
  color: #0b2a5b;
  text-align: center;
  margin: 0 0 20px;
  padding-bottom: 18px;
  border-bottom: 3px solid #0288d1;
}

.terms-container h2 {
  font-size: 22px;
  color: #0b2a5b;
  margin: 34px 0 12px;
  padding-bottom: 6px;
  border-bottom: 1px solid #e3e8ee;
  text-align: left;
}

.terms-container h3 {
  font-size: 17px;
  color: #01579b;
  margin: 22px 0 8px;
}

.terms-container p {
  font-size: 15pt;
  color: #2b2f36;
  margin-bottom: 15px;
  text-align: left;
}

.terms-container ul {
  list-style: none;
  padding: 0;
  margin: 0 0 20px;
  text-align: left;
}

.terms-container ul li {
  font-size: 15pt;
  color: #2b2f36;
  margin-bottom: 10px;
  padding-left: 24px;
  position: relative;
}

.terms-container ul li:before {
  content: "";
  position: absolute;
  left: 4px;
  top: 0.65em;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #0288d1;
}

.terms-container a {
  color: #0277bd;
  font-weight: 600;
}

.actions {
  display: flex;
  justify-content: center;
  margin-top: 20px;
}

.clsFlash.notice {
  background-color: #d4edda;
  color: #28a745;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

.clsFlash.alert {
  background-color: #f8d7da;
  color: #dc3545;
  font-size: 15pt;
  text-align: center;
  padding: 10px;
  margin-bottom: 20px;
  border-radius: 4px;
}

@media (max-width: 600px) {
  .terms-container {
    margin: 16px 12px;
    padding: 24px 20px;
  }
  .terms-container h1 {
    font-size: 24px;
    padding-bottom: 14px;
  }
  .terms-container h2 {
    font-size: 19px;
    margin: 26px 0 10px;
  }
  .terms-container h3 {
    font-size: 16px;
  }
}
.clsUnansweredQuestionsContainer {
  text-align: center;
  padding: 20px;
  background-color: #e3f2fd;
  border-radius: 10px;
  margin: 20px auto;

  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.clsUnansweredQuestionsList {
  background-color: #f0f8ff;
  padding: 20px;
  border-radius: 8px;
  margin: 20px 0;
}

.clsQuestion {
  margin: 10px 0;
  font-size: 1.1em;
}

.clsUnansweredQuestionsContainer h1 {
 
}
.clsEditAnswerContainer {
  color: #000000; /* Black text for visibility */
  margin: 0 auto; /* Center the container */
  text-align: center; /* Center text and inline elements */
}

.AdminAnswersNew_question-container h2 {
  font-size: 1.5em;
  margin: 10px 0;
}

.clsEditAnswerContainer .clsFormGroup {
  text-align: center; /* Align form fields left for readability */
  margin: 10px 0;
  width: 100%;
}

.clsEditAnswerContainer .clsFormGroup label,
.clsEditAnswerContainer .clsFormGroup p,
.clsEditAnswerContainer .clsFormGroup select,
.clsEditAnswerContainer .clsFormGroup input {
  color: #000000; /* Ensure all form elements have visible text */
}

.clsEditAnswerContainer .clsFormGroup p {
  margin: 5px 0;
  font-size: 15pt;
}

.clsEditAnswerContainer .clsActions {
  display: flex;
  justify-content: center; /* Center buttons */
  gap: 10px;
  margin-top: 20px;
}

.clsSortLink {
  color: white;
  text-decoration: none;
}
.clsSortLink:hover {
  color: #e0f0ff;
  text-decoration: underline;
}

.ua_admin-red-alert {
  background: #d32f2f;
  color: white;
  padding: 16px;
  border-radius: 12px;
  text-align: center;
  font-weight: bold;
  font-size: 1.3em;
  margin: 20px auto;
  max-width: 800px;
  border: 4px solid #b71c1c;
  box-shadow: 0 4px 12px rgba(211, 47, 47, 0.3);
}

/* PULSE ONLY on admin new answer page */
body.admin-new-answer-page .ua_admin-red-alert {
  animation: pulse 2s infinite alternate;
}

.ua_admin-red-alert span.username {
  font-size: 1.5em;
  text-decoration: underline;
}
.ua_admin-red-alert span.note {
  font-size: 1em;
  font-weight: normal;
}

/* BLOCK red pulse on login page */
body.login-page-only .ua_admin-red-alert { animation: none !important; }
/* app/assets/stylesheets/user_password_account_recovery.css */
.recovery-page {
 
  margin: 40px auto;
  padding: 20px;
  background-color: #f9f9f9;
  border-radius: 8px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.recovery-page h1 {
  text-align: center;
  margin-bottom: 10px;
}

.recovery-page p {
  font-size: 20px;
  color: #666;
  text-align: center;
  margin-bottom: 20px;
}

.field {
  margin-bottom: 20px;
}

.field label {
  display: block;
  font-size: 15pt;
  color: #333;
  margin-bottom: 5px;
}

.field input[type="email"] {
  width: 100%;
  padding: 10px;
  font-size: 15pt;
  border: 1px solid #ccc;
  border-radius: 4px;
  box-sizing: border-box;
}

.field input[type="email"]:focus {
  outline: none;
  border-color: #007bff;
  box-shadow: 0 0 5px rgba(0, 123, 255, 0.3);
}

.actions {
  display: flex;
  justify-content: center;
  gap: 14px;
  flex-wrap: wrap;
}


.clsCancelButton {
  background-color: #6c757d;
}

.clsCancelButton:hover {
  background-color: #5a6268;
}

.error-message {
  color: #dc3545;
  font-size: 15pt;
  margin-top: 5px;
  display: none;
}

/* ── Phones ────────────────────────────────────────────────────────────────
   Account-recovery pages (forgot username / forgot password). Scoped to
   .recovery-page so nothing else on the site changes. */
.recovery-page { box-sizing: border-box; max-width: 100%; }
.recovery-page .field input { max-width: 100%; }

/* hCaptcha's widget is a fixed ~303px wide — keep it centered instead of overflowing. */
.recovery-page .h-captcha {
  display: flex;
  justify-content: center;
  margin-bottom: 16px;
  overflow: hidden;
}

@media (max-width: 600px) {
  .recovery-page {
    margin: 16px 12px;
    padding: 16px 14px;
  }
  .recovery-page h1 {
    font-size: 1.45rem;
    line-height: 1.25;
  }
  .recovery-page p {
    font-size: 16px;
    line-height: 1.45;
  }
  .field label { font-size: 13pt; }
  /* 16px+ keeps iOS from zooming the page when an input is focused. */
  .field input[type="email"],
  .recovery-page .field input[type="password"] {
    font-size: 16px;
    padding: 12px 10px;
    width: 100%;
    box-sizing: border-box;
  }
  /* Full-width, easy-to-tap stacked buttons. */
  .recovery-page .actions {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }
  .recovery-page .actions .clsButton,
  .recovery-page .actions input[type="submit"] {
    width: 100%;
    box-sizing: border-box;
    text-align: center;
    min-height: 44px;
  }
}

/* Very small phones (<= 340px wide): shrink the captcha so it still fits. */
@media (max-width: 340px) {
  .recovery-page .h-captcha {
    transform: scale(0.85);
    transform-origin: center top;
  }
}
.settings-page {

  margin: 20px auto;
  padding: 20px;
}

.settings-page h1 {
  font-size: 30px;
  margin-bottom: 20px;
}

/* Two-column layout so a full/wide browser window actually gets used —
   main fields on the left, profile photo + location stacked on the right
   (right under the photo), instead of one long single-column form. */
.settings-main-layout {
  display: flex;
  gap: 24px;
  align-items: flex-start;
  flex-wrap: wrap;
}

.settings-main-column {
  flex: 1 1 420px;
  min-width: 0;
}

.settings-sidebar-column {
  flex: 0 1 380px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

/* Card look for each settings section — a little more visual personality
   than a flat list of headings running down the page. */
.settings-card {
  background-color: #ffffff;
  border: 1px solid #bfe3ff;
  border-radius: 10px;
  padding: 16px 20px;
  margin-bottom: 20px;
  box-shadow: 0 2px 6px rgba(0, 123, 255, 0.08);
}

.settings-page .settings-card h2 {
  margin-top: 0;
}

/* .au_clsGpsSection/.au_clsGpsBody/.au_clsGpsControls (admin_users.css) already
   give the bordered box + map-on-top layout, shared with the admin edit-user
   page's GPS section. */
.settings-location-section {
  width: 100%;
}

.settings-page h2 {
  font-size: 20px;
  margin-top: 30px;
  margin-bottom: 15px;
}

.user-info {
  background-color: #f8f9fa;
  padding: 15px;
  border-radius: 4px;
  margin-bottom: 20px;
}

.user-info p {
  margin: 8px 0;
}

.user-info p strong {
  display: inline-block;
  width: 150px;
}

.settings-page .field {
  margin-bottom: 15px;
}

.settings-page .field label {
  display: block;
  font-weight: bold;
  /* Other pages' stylesheets (e.g. user_password_account_recovery.css) define
     a same-specificity ".field label { color: #333 }" that, bundled together
     site-wide, was winning the cascade over the global blue "label" rule —
     this page's own .field labels (Image, Latitude, etc.) rendered dark gray
     instead of blue. Set explicitly here so it always wins on this page. */
  color: #0288d1;
}

.settings-page .field input {
  padding: 8px;
  border: 1px solid #ccc;
  border-radius: 4px;
}

.settings-page .actions {
  margin-top: 20px;
  display: flex;
  gap: 10px;
}


.clsAlert {
  color: red;
  margin-bottom: 15px;
}
.us_search-page {
  text-align: left;
  padding: 20px;
}

.s_clsDivSearchMain {
  text-align: left;
}
.s_clsCriterion {
  text-align: left;
  margin-bottom: 15px;
}
.s_clsCboCategoryID, .s_clsCboQuestionID, .s_clsCboAnswer, .s_clsCboPriority {
  display: inline-block;
  margin-right: 10px;
}
.s_clsDeleteCriterion {
  display: inline-block;
  text-decoration: none;
}
.clsAlert {
  color: red;
  margin-bottom: 15px;
  text-align: left;
}
.s_clsDivFormActions {
  text-align: left;
}
.us_header-container {
  align-items: center;
  gap: 10px;
}

/* Email was stuck at the browser's default ~20-character input width no
   matter how much room the page had — expand it to use the space the
   settings column actually has, capped so it doesn't sprawl on a huge
   screen. */
.us_clsEmailInput {
  /* About 5 characters wider than the browser's ~20-character default (user, 10/30); never wider than a phone screen. */
  width: 26ch;
  max-width: 100%;
  box-sizing: border-box;
}

/* Auto-sizing input fields — fit exactly to content */
.auto-fit-input {
  width: auto;                    /* Let it shrink */
  min-width: 120px;               /* Never too tiny on mobile */
  max-width: 100%;                /* Never overflow container */
  display: inline-block;          /* Respect text width */
  padding: 8px 12px;              /* Keep comfortable padding */
  box-sizing: border-box;         /* Include padding in width */
  font-family: inherit;
  font-size: inherit;
}

/* Plans card (users/settings.html.erb) — a little more personality than a plain
   link, and moved to the top of the page for free-tier users so it's the first
   thing they see instead of buried at the bottom. */
.us-plan-card-free {
  background: linear-gradient(135deg, #fff3cd, #ffe0b2);
  border: 2px solid #f5a623;
}

.us-plan-card-paid {
  background: linear-gradient(135deg, #e8f5e9, #d4edda);
  border: 2px solid #20c997;
}

.us-plan-pulse-btn {
  animation: us-plan-pulse 1.8s ease-in-out infinite;
}

@keyframes us-plan-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(245, 166, 35, 0.55); transform: scale(1); }
  70%  { box-shadow: 0 0 0 14px rgba(245, 166, 35, 0); transform: scale(1.04); }
  100% { box-shadow: 0 0 0 0 rgba(245, 166, 35, 0); transform: scale(1); }
}

@media (prefers-reduced-motion: reduce) {
  .us-plan-pulse-btn { animation: none; }
}

/* Settings on a phone: the floating "Update Settings" button sits in the MIDDLE of the bottom edge and is only as wide as its text
   (it was pinned to the right and could stretch across the screen). !important beats the button's inline style.
   TO REVERT: delete this block. */
@media (max-width: 800px) {
  .settings-page .actions input[type="submit"] {
    left: 50% !important; right: auto !important; transform: translateX(-50%) !important;
    width: auto !important; max-width: 80% !important; min-width: 0 !important; padding: 8px 26px !important; margin: 0 !important;
    font-size: 12pt !important; white-space: nowrap;
  }
  .settings-page .actions { justify-content: center; }
}

/* Settings on a phone: a slightly smaller page title and much less space above and below it. TO REVERT: delete this block. */
@media (max-width: 800px) {
  .settings-page.clsBlueContainer { padding-top: 4px; }
  .settings-page.clsBlueContainer > h1 { font-size: 25px; margin: 2px 0 4px; }
}

/* Settings, "Unlock More With a Plan!" card: less space under its title, and the "View Membership Plans" button centered left to right.
   TO REVERT: delete this block. */
.settings-page .us-plan-card-free h2 { margin-bottom: 4px; }
.settings-page .us-plan-card-free p { margin-top: 4px; }
.settings-page .us-plan-card-free .us-plan-pulse-btn { display: flex; width: max-content; max-width: 100%; margin: 10px auto 4px; }

/* User Profile card: the value follows its label right away ("Username: Max White") instead of a fixed 150px label column, and the
   box has no big empty strip at the bottom. TO REVERT: delete this block. */
.user-info p strong { display: inline; width: auto; margin-right: 4px; }
.user-info { padding: 10px 14px; margin-bottom: 0; }
.user-info p { margin: 6px 0; }
.user-info p:first-child { margin-top: 0; }
.user-info p:last-child { margin-bottom: 0; }
.settings-page .settings-card:has(.user-info) { padding-bottom: 14px; margin-bottom: 12px; }

/* User Profile card: the labels (Username, Email, Joined, Last Updated) sit further to the left, giving the values more room.
   TO REVERT: delete this block. */
.user-info { padding-left: 6px; padding-right: 6px; }
.settings-page .settings-card:has(.user-info) { padding-left: 10px; padding-right: 10px; }

/* Edit Profile card on a phone (same tidy-up as the User Profile card): less padding on the sides so labels and boxes sit further
   left and have room, tighter gaps between the fields, and no big empty strip at the bottom. TO REVERT: delete this block. */
@media (max-width: 800px) {
  .settings-page .settings-card.us_editprofile { padding: 8px 10px 10px; margin-bottom: 12px; }
  .settings-page .settings-card.us_editprofile h2 { margin: 0 0 6px; }
  .settings-page .us_editprofile .field { margin-bottom: 8px; }
  .settings-page .us_editprofile .field label { margin-bottom: 2px; }
  .settings-page .us_editprofile .field input { width: 100%; box-sizing: border-box; }
  .settings-page .us_editprofile .field small { margin-top: 2px; }
  .settings-page .us_editprofile .field:last-child { margin-bottom: 0; }
}

/* Edit Profile on a phone: Username and Email lined up with New password etc. The shared .auto-fit-input class gave THEIR rows 12px of
   left padding and made them shrink-to-fit inline blocks. TO REVERT: delete this block. */
@media (max-width: 800px) {
  .settings-page .us_editprofile .field.auto-fit-input { display: block; padding: 0; min-width: 0; width: auto; }
}

/* Preferences card on a phone: the checkboxes (and their text) sit further to the left — less padding on the card's sides.
   TO REVERT: delete this block. */
@media (max-width: 800px) {
  .settings-page .settings-card#event_reminder_pref { padding-left: 8px; padding-right: 8px; }
}

/* My Location on a phone (800px and narrower):
   - the box was "width: 100%" PLUS its own padding and border (no border-box), so it was wider than the screen and everything inside
     (Stop sharing, Timezone, How I roll, Phone location text) ran off the right edge — it now fits the screen and long text wraps;
   - less space above the "📍 My Location" title;
   - the "Use current location" and "Search" buttons are centered left to right.
   TO REVERT: delete this block. */
@media (max-width: 800px) {
  .settings-page .settings-location-section { box-sizing: border-box; width: 100%; max-width: 100%; }
  .settings-page .settings-location-section > h2 { margin-top: 6px; margin-bottom: 8px; }
  .settings-page .settings-location-section .au_clsGpsBody,
  .settings-page .settings-location-section .au_clsGpsControls { box-sizing: border-box; width: 100%; max-width: 100%; min-width: 0; }
  .settings-page .settings-location-section .field,
  .settings-page .settings-location-section small { max-width: 100%; overflow-wrap: anywhere; word-break: normal; }
  .settings-page .settings-location-section .field.auto-fit-input { display: block; padding: 0; min-width: 0; width: auto; }
  .settings-page .settings-location-section select,
  .settings-page .settings-location-section input[type="number"] { max-width: 100%; box-sizing: border-box; }
  .settings-page .settings-location-section .au_clsGpsSearchRow { flex-wrap: wrap; justify-content: center; }
  .settings-page .settings-location-section .au_clsLocationSearch { flex: 1 1 180px; }
}

/* My Location on a phone: Latitude and Longitude share the row equally and their boxes fill (never exceed) their half — the Longitude
   box used to run off the right edge. TO REVERT: delete this block. */
@media (max-width: 800px) {
  .settings-page .settings-location-section .au_clsGpsLatLngRow { gap: 8px; width: 100%; }
  .settings-page .settings-location-section .au_clsGpsLatLngRow .field { flex: 1 1 0; min-width: 0; margin-bottom: 8px; }
  .settings-page .settings-location-section .au_clsGpsLatLngRow input { width: 100%; min-width: 0; box-sizing: border-box; }
}

/* My Location: less white space between the Latitude/Longitude boxes and the city search row, and a slightly smaller Search button.
   TO REVERT: delete this block. */
.settings-page .settings-location-section .au_clsGpsLatLngRow .field { margin-bottom: 0; }
.settings-page .settings-location-section .au_clsGpsSearchRow { margin-top: -4px; padding-top: 0; }
.settings-page .settings-location-section #au_location_search_btn {
  min-height: 34px; padding: 4px 16px; font-size: 0.9em; margin: 0;
}

/* Settings page touches:
   - "Your alias": less space under the title, the "Give me a new alias" button centered left to right;
   - "Log Out of All Devices" and "Delete My Account" are centered LINKS (red, underlined) instead of buttons;
   - the city "Search" button is only as wide as its text on a phone (never the whole width).
   TO REVERT: delete this block. */
.settings-page .st_alias_card h2 { margin-bottom: 4px; }
.settings-page .st_alias_card > p:first-of-type { margin-top: 0; }
.settings-page #aliasRerollForm { text-align: center; margin: 4px 0 0; }
.settings-page #aliasRerollForm .clsButton { margin: 6px auto; }
.settings-page .st_centerform { text-align: center; margin: 8px 0 4px; }
.settings-page .st_linklike {
  display: inline; background: none; border: 0; padding: 0; margin: 0; min-height: 0; height: auto; box-shadow: none;
  font: inherit; font-weight: bold; color: #c62828; text-decoration: underline; cursor: pointer;
}
.settings-page .st_linklike:hover { color: #8e1b1b; }
@media (max-width: 800px) {
  .settings-page .settings-location-section #au_location_search_btn { flex: 0 0 auto !important; width: auto !important; max-width: 60%; }
}

/* Settings: the "Timezone" and "How I roll" titles a little bigger; and on a phone, less space between the Preferences card and the
   Profile photo card below it. TO REVERT: delete this block. */
.settings-page .settings-location-section label[for="user_timezone"],
.settings-page .settings-location-section label[for="user_location_refresh_days"] { font-size: 1.15em; }
@media (max-width: 800px) {
  .settings-page .settings-main-layout { gap: 8px; }
  .settings-page .settings-main-column > .settings-card:last-child { margin-bottom: 0; }
}

/* 🗑️ Delete Account pop-up (user, 10/30): two choices, phone-friendly. White box, dark text; the buttons sit side by side
   on a wide screen and stack full width on a phone. A button stays faint until "delete" is typed. */
.st_delete_dialog { width: 92vw; max-width: 520px; max-height: 90vh; overflow-y: auto; box-sizing: border-box;
  border: 4px solid #c62828; border-radius: 14px; padding: 20px; background: #fff; color: #1a1a1a; }
.st_delete_dialog::backdrop { background: rgba(0, 0, 0, .55); }
.st_delete_dialog p { margin: 0 0 10px; line-height: 1.4; }
.st_delete_title { margin: 0 0 8px; color: #c62828; }
.st_delete_label { display: block; font-weight: bold; margin: 6px 0 4px; }
.st_delete_input { font-size: 18px; padding: 8px; width: 100%; box-sizing: border-box; }
.st_delete_btns { display: flex; flex-wrap: wrap; gap: 10px; justify-content: flex-end; margin-top: 14px; }
.st_delete_form { margin: 0; }
.st_delete_go:disabled { opacity: .45; cursor: not-allowed; }
.st_delete_now { background: #c62828 !important; color: #fff !important; font-weight: bold; border: 2px solid #c62828; }
.st_delete_later { background: #fff !important; color: #8e1b1b !important; font-weight: bold; border: 2px solid #c62828; }
.st_delete_cancel { background: #eee !important; color: #1a1a1a !important; }
/* The two choices on the page itself (user, 10/30): side by side, each with its one-line explanation under it. */
.st_delete_choices { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; margin: 8px 0 4px; }
.st_delete_choice { flex: 1 1 200px; max-width: 280px; display: flex; flex-direction: column; align-items: stretch; gap: 4px; text-align: center; }
.st_delete_choice small { color: #333; }
.st_delete_choices button, .st_delete_choices .st_delete_form { width: 100%; }
@media (max-width: 520px) {
  .st_delete_choice { max-width: none; flex-basis: 100%; }
  .st_delete_choices button { min-height: 48px; font-size: 1.05rem; }
  .st_delete_dialog { padding: 14px; }
  .st_delete_btns { flex-direction: column; }
  .st_delete_btns .st_delete_form, .st_delete_btns button { width: 100%; }
  .st_delete_btns button { min-height: 48px; font-size: 1.05rem; }
}
/* Three-region grid (not flex + space-between) so the center group sits at
   the true horizontal center of the row regardless of how wide the right
   (privacy/events controls) region is — space-between only centers when
   both sides are equal width, which they usually aren't. The left region
   stays empty; it's just there so the center column has an equal-width
   counterweight on both sides. */
.mp_clsTitleRow {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 10px;
}

.mp_clsTitleCenterGroup {
  justify-self: center;
  display: flex;
  align-items: center;
  gap: 14px;
}

.mp_clsTitleCenter {
  margin: 0;
}

.mp_clsTitleRight {
  justify-self: end;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}

.mp_clsZoomControl {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13pt;
  color: #495057;
}

.mp_clsZoomInput {
  width: 60px;
  padding: 4px 6px;
  font-size: 13pt;
}

.mp_clsZoomSaveBtn {
  font-size: 12pt;
  padding: 3px 10px;
}

.mp_clsZoomSaved {
  color: #1a7f37;
  font-weight: bold;
}

.mp_clsMapWrapper {
  position: relative;
}

/* .clsBlueContainer's site-wide 20px bottom margin left too much room
   between this box and the footer below it — scoped down just here. */
.mp_clsMapContainer {
  margin-bottom: 6px;
}

.mp_clsMap {
  height: 480px;
  /* Leaves a strip of blank container to the right (not full width) so a
     laptop/desktop user can rest the cursor just past the map's edge and
     scroll the page normally — Leaflet grabs the scroll wheel to zoom
     whenever the cursor is actually over the map itself. */
  width: calc(100% - 70px);
  border-radius: 6px;
  border: 1px solid #dee2e6;
}

@media (max-width: 700px) {
  /* Not enough room to spare on a phone/narrow screen — full width there. */
  .mp_clsMap {
    width: 100%;
  }
}

.mp_clsLoading {
  font-size: 15pt;
  color: #6c757d;
  margin-bottom: 6px;
}

.mp_clsError {
  font-size: 15pt;
  color: #dc3545;
  margin-bottom: 6px;
}

.mp_clsLocationBar {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 10px;
  flex-wrap: wrap;
}

.mp_clsLocationLabel {
  font-size: 15pt;
  color: #495057;
}

.mp_clsChangeBtn {
  font-size: 15pt;
  padding: 4px 12px;
}

/* Plain text link, not a red pill button — this is a low-stakes, reversible
   action (re-sharing is one settings save away), not a "danger zone" delete. */
.mp_clsStopSharingForm {
  display: inline;
}
.mp_clsStopSharingLink {
  background: none;
  border: none;
  padding: 0;
  font-size: 15pt;
  font-family: inherit;
  color: #6c757d;
  text-decoration: underline;
  cursor: pointer;
}
.mp_clsStopSharingLink:hover {
  color: #495057;
}

.mp_clsCountBadge {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(0, 80, 200, 0.75);
  color: #fff;
  font-weight: bold;
  font-size: 15pt;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
  white-space: nowrap;
}

/* Admin/hidden-only area bubbles (see map_page.js) — visually distinct red
   badge instead of the normal blue member-count circle, so an admin never
   mistakes a hidden/admin cluster for a real member headcount. */
.mp_clsCountBadge-hidden {
  background: rgba(192, 57, 43, 0.85);
  font-size: 13pt;
}

.mp_clsCountBadge-yes { background: rgba(46, 125, 50, 0.9); }
.mp_clsCountBadge-no { background: rgba(117, 117, 117, 0.9); }
.mp_clsCountBadge-unanswered { background: rgba(249, 168, 37, 0.95); color: #222; }

.mp_clsEventPopupDivider {
  margin: 8px 0;
  border: none;
  border-top: 1px solid #ddd;
}

.mp_clsAdminAreaNames {
  margin-top: 6px;
  padding: 6px 10px;
  background-color: #fdecea;
  border: 2px solid #c0392b;
  border-radius: 6px;
  color: #c0392b;
}

.mp_clsAdminAreaNames a {
  color: #c0392b;
  font-weight: bold;
  text-decoration: underline;
}

/* "This is you" — Google Maps-style blue, matching the Android app's own
   marker (deliberately distinct from every RSVP/match color used elsewhere
   on this map). */
.mp_clsUserMarker {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: #4285f4;
  border: 3px solid #fff;
  box-sizing: border-box;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
}

/* Individual member pin, colored by match % (see matchColor() in map_page.js) */
.mp_clsMatchDot {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 2px solid #fff;
  box-sizing: border-box;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
}

/* No match score yet: a white dot with a grey "?" (10/28). */
.mp_clsMatchDotUnknown {
  border: 2px solid #757575;
  color: #555;
  font: bold 11px/14px sans-serif;
  text-align: center;
}

/* 75%+ match: a green ring pulses out from the dot (10/28). */
.mp_clsMatchDotPulse {
  animation: mp_matchPulse 1.6s ease-out infinite;
}
@keyframes mp_matchPulse {
  0%   { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 0 0 0 rgba(46, 125, 50, 0.7); }
  70%  { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 0 0 12px rgba(46, 125, 50, 0); }
  100% { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 0 0 0 rgba(46, 125, 50, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .mp_clsMatchDotPulse { animation: none; box-shadow: 0 0 0 4px rgba(46, 125, 50, 0.45); }
}

.mp_clsLegend {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 16px;
  margin-top: 10px;
  padding: 8px 12px;
  background: #f8f9fa;
  border: 1px solid #dee2e6;
  border-radius: 6px;
  font-size: 0.85em;
  color: #444;
}

.mp_clsLegendItem {
  display: flex;
  align-items: center;
  gap: 6px;
}

.mp_clsLegendDot {
  display: inline-block;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  border: 1px solid rgba(0, 0, 0, 0.15);
}

/* Matches the blue ring a clicked/selected event pin gets on the map. */
.mp_clsLegendDotSelected {
  border: 2px solid #0288d1;
  box-shadow: 0 0 0 2px rgba(2, 136, 209, 0.35);
}

.mp_clsAliasNote {
  font-size: 0.85em;
  color: #666;
  margin: 10px 0 0;
}

.mp_clsPopupMatchDot {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 1px solid #9e9e9e;   /* grey edge so the white "no score yet" dot still shows (10/28) */
  margin-right: 5px;
  vertical-align: middle;
}

.mp_clsPrivacyControl { margin-left: 16px; }
.mp_clsBlurSelect { font-size: inherit; margin-left: 4px; }
.mp_clsShowMeLabel { margin-left: 10px; white-space: nowrap; }
.mp_clsHiddenNotice { margin-bottom: 4px; text-align: center; }

/* Both this notice and the map below it are separate .clsBlueContainer boxes,
   each carrying that class's site-wide 20px margin — stacked, that's a much
   bigger gap than this one row needs. Scoped to right after the notice, so
   it doesn't touch .clsBlueContainer spacing anywhere else on the site. */
.mp_clsHiddenNotice + .clsBlueContainer {
  margin-top: 8px;
}

/* Nomads/Events toggle — same idea as the Android app's map screen. */
.mp_clsModeToggle {
  display: inline-flex;
  border: 1px solid #0288d1;
  border-radius: 20px;
  overflow: hidden;
}
.mp_clsModeBtn {
  background: #fff;
  color: #0288d1;
  border: none;
  padding: 6px 16px;
  font-size: 12pt;
  font-weight: bold;
  cursor: pointer;
}
.mp_clsModeBtn:hover { background: #e3f2fd; }
.mp_clsModeBtnActive {
  background: #0288d1;
  color: #fff;
}
.mp_clsModeBtnActive:hover { background: #0277bd; }

.mp_clsDateInput {
  padding: 4px 6px;
  font-size: 12pt;
}
.mp_clsRefreshBtn {
  background: none;
  border: 1px solid #ccc;
  border-radius: 4px;
  padding: 3px 8px;
  font-size: 12pt;
  cursor: pointer;
}
.mp_clsRefreshBtn:hover { background: #f0f0f0; }

/* Event pin — teardrop shape; color set inline per-marker by RSVP status
   (yellow = unanswered, green = going, grey = not going — same meaning as
   the events list page's row tints, in map-pin-appropriate saturation). */
.mp_clsEventPin {
  width: 26px;
  height: 26px;
  border-radius: 50% 50% 50% 0;
  transform: rotate(-45deg);
  border: 3px solid #fff;
  box-sizing: border-box;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
  margin: 0 0 8px 4px;
}

/* Clicked/"selected" pin — the fill color already means RSVP status
   (yellow/green/grey), so selection is shown as a distinct blue ring
   instead of overriding that, plus a stronger glow so it stands out. Stays
   selected (and its popup stays open) until clicked again or clicked away. */
.mp_clsEventPinSelected {
  border-color: #0288d1;
  box-shadow: 0 0 0 3px rgba(2, 136, 209, 0.45), 0 1px 4px rgba(0, 0, 0, 0.35);
}

.mp_clsEventPopup { min-width: 200px; }
.mp_clsEventPopupName {
  display: block;
  font-weight: bold;
  font-size: 1.05em;
  color: #0066cc;
  margin-bottom: 4px;
}
.mp_clsEventPopupDate {
  font-size: 0.85em;
  color: #616161;
}
.mp_more { margin-top: 6px; }
.mp_more summary { cursor: pointer; font-weight: bold; font-size: 0.95em; color: #0066cc; padding: 6px 0; }
.mp_clsEventPopupRsvp {
  font-size: 0.85em;
  font-weight: bold;
  color: #616161;
  margin-top: 4px;
}
.mp_clsEventPopupRsvpLink {
  display: block;
  font-size: 0.85em;
  font-weight: bold;
  color: #0066cc;
  margin-top: 4px;
}
.mp_clsEventPopupCampfire {
  display: block;
  font-weight: bold;
  font-size: 1em;
  color: #0066cc;
  margin-top: 6px;
}

/* Mobile / narrow screens: the 3-column title row (empty | toggle+title | controls)
   left the right-hand controls (blur, Show me, event dates, Events list link)
   squeezed off-screen. Stack it instead: toggle + title on top, controls
   wrapping underneath, everything centered and inside the viewport. */
@media (max-width: 900px) {
  .mp_clsTitleRow {
    grid-template-columns: 1fr;
    gap: 8px;
  }
  .mp_clsTitleLeft { display: none; }
  .mp_clsTitleCenterGroup { justify-self: center; }
  .mp_clsTitleRight {
    justify-self: center;
    justify-content: center;
    width: 100%;
    gap: 8px 12px;
  }
  .mp_clsZoomControl {
    flex-wrap: wrap;
    justify-content: center;
    font-size: 12pt;
  }
  .mp_clsPrivacyControl { margin-left: 0; }
}

@media (max-width: 480px) {
  .mp_clsDateInput { font-size: 11pt; max-width: 42vw; box-sizing: border-box; }
  .mp_clsModeBtn { padding: 6px 12px; }
  .mp_clsLocationLabel, .mp_clsChangeBtn, .mp_clsStopSharingLink { font-size: 12pt; }
  .mp_clsMap { height: 400px; }
}

/* ── Events mode: From / To date range, redesigned (mp_dr_*) ───────────────────────────────────────────── */
.mp_dr {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: center;
  gap: 8px 12px;
}
.mp_dr_label { flex: 0 0 100%; font-weight: bold; color: #01579b; text-align: center; }
.mp_dr_field { display: flex; flex-direction: column; flex: 1 1 140px; min-width: 0; max-width: 220px; font-weight: bold; color: #01579b; }
.mp_dr .mp_clsDateInput {
  width: 100%;
  max-width: none;
  box-sizing: border-box;
  min-height: 44px;
  padding: 6px 8px;
  font-size: 13pt;
  color: #2b2b2b;
  background: #fff;
  border: 2px solid #90caf9;
  border-radius: 10px;
}
.mp_dr_actions { flex: 0 0 100%; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 8px 12px; }
.mp_dr .mp_clsRefreshBtn {
  min-height: 44px;
  padding: 6px 16px;
  font-size: 13pt;
  font-weight: bold;
  color: #2b2b2b;
  background: #ffd43b;
  border: 0;
  border-radius: 999px;
}
.mp_dr .mp_clsRefreshBtn:hover { background: #ffe066; }
.mp_dr_link { font-weight: bold; color: #0288d1; text-decoration: none; white-space: nowrap; padding: 8px 14px; border: 2px solid #90caf9; border-radius: 999px; }

/* Phones / narrow: the "Map" title goes to the LEFT of the Nomads / Events toggle (it was after it). */
@media (max-width: 900px) {
  .mp_clsTitleCenter { order: -1; }
  .mp_clsTitleCenterGroup { gap: 10px; }
}

/* Phones / narrow: "Show events" title sits left-aligned, directly above the From date. */
@media (max-width: 900px) {
  .mp_dr { justify-content: flex-start; }
  .mp_dr_label { text-align: left; }
}

/* Phones / narrow: a little breathing room on the left and right of the header controls (From / To boxes etc.). */
@media (max-width: 900px) {
  .mp_clsTitleRow { padding-left: 14px; padding-right: 14px; padding-top: 8px; box-sizing: border-box; }
}

/* "Use two fingers to move the map" hint (phones): fades in over the map while someone drags with one finger. TO REVERT: delete this block. */
.mp_gesture_hint {
  position: absolute; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; text-align: center;
  background: rgba(0, 0, 0, 0.55); color: #fff; font-weight: bold; font-size: 14pt; padding: 12px;
  opacity: 0; pointer-events: none; transition: opacity 0.2s ease;
}
.mp_gesture_hint.mp_on { opacity: 1; }

/* Phones: "Full screen" / "Done" buttons on the map, and the full-screen map itself. */
.mp_phone_ctl { display: flex; flex-direction: column; gap: 6px; align-items: flex-end; }
.mp_phone_btn { padding: 8px 14px; font-size: 14pt; font-weight: bold; border-radius: 10px; border: 2px solid #0288d1; background: #fff; color: #01579b;
  box-shadow: 0 1px 4px rgba(0,0,0,.35); cursor: pointer; }
.mp_phone_done { background: #ffe066; border-color: #f5b301; color: #5b3b00; }
.mp_clsMap.mp_map_full { position: fixed !important; inset: 0; width: 100% !important; height: 100% !important; max-width: none; z-index: 5000;
  border: 0; border-radius: 0; }
body.mp_noscroll { overflow: hidden; }

/* ---- My Places view ---- */
.mp_places_panel { margin: 14px 0 6px; }
.mp_places_label { display: block; font-weight: bold; margin-bottom: 4px; }
.mp_places_search { width: 100%; max-width: 420px; box-sizing: border-box; padding: 9px 11px; border: 2px solid #90caf9; border-radius: 10px; font: inherit; }
.mp_places_count { margin: 8px 0 4px; color: #455a64; font-weight: bold; }
.mp_places_empty { margin: 8px 0; color: #455a64; }
.mp_places_list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.mp_places_item { display: flex; gap: 10px; align-items: flex-start; background: #fff; border: 1px solid #bfe3ff; border-radius: 10px; padding: 8px 12px; }
.mp_places_dot { flex-shrink: 0; width: 14px; height: 14px; border-radius: 50%; margin-top: 5px; border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0,0,0,.25); }
.mp_places_text { min-width: 0; overflow-wrap: anywhere; }
.mp_places_name { background: none; border: 0; padding: 0; font: inherit; font-weight: bold; color: #0a58ca; text-align: left; cursor: pointer; text-decoration: underline; }
.mp_places_sub { font-size: 0.92em; color: #37474f; margin-top: 2px; }

/* Admin-only "Edit question" link at the right end of each My Places row: red-shaded with a bold red border. */
.mp_places_admin_edit { margin-left: auto; align-self: flex-start; flex-shrink: 0; padding: 4px 10px; background-color: #fdecea; border: 3px solid #c0392b;
  border-radius: 10px; color: #a71d2a; font-weight: bold; font-size: 0.9em; text-decoration: none; white-space: nowrap; }
.mp_places_admin_edit:hover { background-color: #f8d0d0; }
@media (max-width: 600px) { .mp_places_item { flex-wrap: wrap; } .mp_places_admin_edit { margin-left: 24px; } }

/* Admin-only: the username (+ main alias) at the top of a nomad's map pop-up — red = "only admins see this". */
.mp_clsAdminNameBox { background: #fdecea; border: 3px solid #c0392b; border-radius: 6px; padding: 4px 8px; margin-bottom: 6px; }
.mp_clsAdminAlias { font-size: 0.9em; color: #6b1d14; }
/* ============================================= */
/* WELCOME PAGE STYLES — all classes prefixed w_ */
/* Revamped 2026-10-03 to the house style in     */
/* docs/design.md (dark hero, emoji, yellow CTA) */
/* Mobile-first + responsive; text >= 15pt       */
/* ============================================= */

.w_container {
  max-width: min(1200px, 95vw);
  margin: 0 auto;
  padding: 16px;
}
@media (min-width: 768px) {
  .w_container { padding: 24px; }
}

/* Hero banner */
.w_hero {
  background: linear-gradient(180deg, #0b2a5b 0%, #01579b 55%, #0288d1 100%);
  color: #fff;
  text-align: center;
  border-radius: 16px;
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
  padding: 28px 20px 24px;
  margin-bottom: 24px;
}
.w_hero-emoji {
  font-size: 40pt;
  line-height: 1.1;
  display: inline-block;
  animation: w_wave 2.8s ease-in-out infinite;
  transform-origin: 70% 70%;
}
.w_heading {
  color: #fff;
  font-size: 27pt;
  font-weight: 700;
  line-height: 1.2;
  margin: 6px 0 8px;
}
.w_subheading {
  color: #e3f2fd;
  font-size: 16pt;
  margin: 0 0 16px;
}
@media (max-width: 600px) {
  .w_heading { font-size: 21pt; }
  .w_subheading { font-size: 15pt; }
}

/* Quick-start progress */
.w_progress {
  max-width: 520px;
  height: 18px;
  margin: 0 auto 8px;
  background: rgba(255, 255, 255, 0.25);
  border-radius: 999px;
  overflow: hidden;
}
.w_progress-bar {
  height: 100%;
  min-width: 6px;
  background: linear-gradient(90deg, #ffd43b, #ffe066);
  border-radius: 999px;
  box-shadow: 0 0 10px rgba(255, 224, 102, 0.8);
  transition: width 0.8s ease;
}
.w_progress-text {
  color: #ffe066;
  font-weight: bold;
  font-size: 15pt;
  margin: 0;
}

/* Cards grid */
.w_sections {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
}

.w_card {
  position: relative;
  flex: 1 1 340px;
  background: #fff;
  border: 1px solid rgba(2, 136, 209, 0.25);
  border-radius: 16px;
  box-shadow: 0 3px 10px rgba(2, 136, 209, 0.12);
  padding: 20px 22px 24px;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.w_card:not(.w_card-disabled):hover {
  transform: translateY(-3px);
  box-shadow: 0 8px 18px rgba(2, 136, 209, 0.22);
}

.w_card-top {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 6px;
}
.w_step-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: #0288d1;
  color: #fff;
  font-weight: 700;
  font-size: 16pt;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
}
.w_card-emoji { font-size: 32pt; line-height: 1; }

.w_card-title {
  color: #0b2a5b;
  font-size: 19pt;
  font-weight: 700;
  margin: 4px 0 10px;
}
.w_card-text {
  color: #2b2b2b;
  font-size: 15pt;
  line-height: 1.5;
  margin: 0 0 18px;
}

/* Yellow glowing primary button, pill-shaped */
.w_card .w_cta,
.w_card .w_cta.clsBlueButton {
  margin-top: auto;
  height: auto;
  min-height: 48px;
  padding: 10px 26px;
  background: #ffd43b;
  color: #2b2b2b;
  font-weight: 700;
  font-size: 15pt;
  border-radius: 25px;
  box-shadow: 0 0 12px rgba(255, 212, 59, 0.55);
  transition: transform 0.2s, background 0.2s;
}
.w_card .w_cta:hover { background: #ffe066; transform: scale(1.05); }

/* Finished card (all quick start questions answered) */
.w_card-done {
  background: linear-gradient(180deg, #0b2a5b, #01579b);
  border-color: #0b2a5b;
}
.w_card-done .w_card-title,
.w_card-done .w_card-text { color: #fff; }
.w_card-done .w_celebration { background: rgba(255, 255, 255, 0.15); width: 100%; box-sizing: border-box; }
.w_card-done .completion-celebration-title { font-size: 18pt; }
.w_card-done .completion-celebration-subtitle { font-size: 15pt; }

/* Coming-soon card — dimmed and non-interactive */
.w_card-disabled {
  background: #eceff3;
  border-style: dashed;
  box-shadow: none;
  opacity: 0.9;
  pointer-events: none;
}
.w_card-disabled .w_card-title,
.w_card-disabled .w_card-text { color: #6b7280; }
.w_card-disabled .w_step-badge { background: #9ca3af; }
.w_card-disabled .w_card-emoji { filter: grayscale(100%); opacity: 0.7; }
.w_card-disabled .disabled-link,
.disabled-link {
  pointer-events: none;
  filter: grayscale(100%);
  opacity: 0.6;
}
.w_ribbon {
  position: absolute;
  top: 14px;
  right: 14px;
  background: #ffe066;
  color: #5f4b00;
  font-weight: 700;
  font-size: 15pt;
  padding: 2px 14px;
  border-radius: 999px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
}
.w_coming-note {
  color: #6b7280;
  font-weight: bold;
  font-size: 15pt;
  margin: 8px 0 0;
}

.w_search-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 12px;
  width: 100%;
  margin: 8px 0 12px;
}
@media (min-width: 768px) {
  .w_search-grid { grid-template-columns: repeat(2, 1fr); }
}
.w_search-grid .clsButton { height: auto; min-height: 44px; font-size: 15pt; white-space: normal; }

/* Hide section */
.w_hide-section {
  margin-top: 28px;
  text-align: center;
}
.w_hide-label {
  display: inline-flex;
  align-items: center;
  font-size: 15pt;
  cursor: pointer;
}
.w_hide-label input[type="checkbox"] {
  margin-right: 12px;
  transform: scale(1.3);
}
.w_hide-note {
  font-size: 15pt;
  color: #555;
  margin-top: 8px;
}

@keyframes w_wave {
  0%, 60%, 100% { transform: rotate(0deg); }
  10%, 30% { transform: rotate(10deg); }
  20%, 40% { transform: rotate(-8deg); }
  50% { transform: rotate(6deg); }
}
@media (prefers-reduced-motion: reduce) {
  .w_hero-emoji { animation: none; }
  .w_progress-bar, .w_card, .w_card .w_cta { transition: none; }
}

/* 20 Questions Completion Celebration */
.completion-popup {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
  padding: 2.5rem;
  border-radius: 16px;
  text-align: center;
  box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
  margin: 2rem auto;
  max-width: 560px;
  font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  animation: fadeInUp 0.6s ease-out;
}

.completion-popup h2 {
  margin: 0 0 1rem;
  font-size: 2.6rem;
  font-weight: 700;
}

.completion-popup p {
  margin: 0.8rem 0;
  font-size: 1.5rem;
  line-height: 1.5;
}

.completion-popup p:last-child {
  opacity: 0.95;
  font-size: 1.3rem;
}

/* Optional: nice fade-in animation */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
/* Gray background when 20 questions are completed */
.completed-20questions-bg {
  background-color: #f5f5f5 !important;
}

/* Celebration popup */
.completion-popup {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
  padding: 2.5rem;
  border-radius: 16px;
  text-align: center;
  box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
  margin: 2rem auto;
  max-width: 560px;
  font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  animation: fadeInUp 0.6s ease-out;
}

.completion-popup h2 {
  margin: 0 0 1rem;
  font-size: 2.6rem;
  font-weight: 700;
}

.completion-popup p {
  margin: 0.8rem 0;
  font-size: 1.5rem;
  line-height: 1.5;
}

.completion-popup p:last-child {
  opacity: 0.95;
  font-size: 1.3rem;
}

/* Celebration in card */
.completion-celebration {
  text-align: center;
  padding: 1.5rem;
  background: rgba(255,255,255,0.15);
  border-radius: 12px;
  margin-top: 1rem;
}

.completion-celebration-title {
  margin: 0;
  font-size: 1.4rem;
  font-weight: bold;
  color: white;
}

.completion-celebration-subtitle {
  margin: 0.5rem 0 0;
  color: #e0f0ff;
  font-size: 1rem;
}

@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(30px); }
  to { opacity: 1; transform: translateY(0); }
}
/* Step 3 link under the live template buttons. a:visited-safe (own colour on a plain link). */
.w_card a.w_more-link, .w_card a.w_more-link:visited {
  color: #0a58ca;
  font-weight: bold;
  font-size: 15pt;
  text-decoration: underline;
  margin-top: 6px;
}
/* app/assets/stylesheets/application.css */
/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Any CSS (and SCSS, if configured) file within this directory, lib/assets/stylesheets, or any plugin's
 * vendor/assets/stylesheets directory can be referenced here using a relative path.
 *
 * You're free to add application-wide styles to this file and they'll appear at the bottom of the
 * compiled file so the styles you add here take precedence over styles defined in any other CSS
 * files in this directory.
 *


 */

/* Any #anchor link (e.g. "On"/"Off" on the Events page jumping to a settings
   section) would otherwise land exactly at the top of the viewport, right
   underneath — i.e. hidden behind — .clsMenuBar below, which is sticky/
   position:fixed-to-the-top over the page content. This tells the browser
   to leave that much room above an anchor target instead. */
html {
  scroll-padding-top: 80px;
}

  body {
  margin: 0;
  padding: 0;
  background-color: #f5f5f5;
  font-family: 'Lato', sans-serif;
  /* Audience skews older. HARD FLOOR: no text below 15pt anywhere on the site
     (15pt ≈ 20px). See docs/design.md. Bump this to raise the floor further. */
  font-size: 15pt;
  line-height: 1.5;
  /* Sticky footer: on a short page the footer sits right at the bottom of the
     viewport instead of floating up after a short amount of content, leaving
     a gap of page background below it. */
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

/* Grows to fill any leftover vertical space so the footer (a flex sibling,
   after .clsMenuBar and this) gets pushed to the true bottom on short pages. */
.container {
  flex: 1 0 auto;
}

.f_site-footer {
  flex-shrink: 0;
}

.app_clsLightBlueText {
  color: #0288d1;
}
.app_clsCenterText {
 text-align: center;
}

.app_clsBoldText {  
  font-weight: bold;
}

.app_clsYellow {
  color: #FFD700;  
}

 .app_clsSiteName {
  font-family: 'Quicksand', sans-serif;
  font-size: 28px;
  font-weight: 700;
  color:#FFFFFF;
  text-decoration: none;
}

/* Actual tagline size is set below (a later, duplicate .app_clsTagline rule
   wins the cascade) — this one only carries color/spacing now. */
.app_clsTagline {
  color: #FFFFFF;
 text-decoration: none;
  margin-top: 1px; /* Minimal gap */
}


#menu-content li span.clsEmoji {
font-size: 1.2em;
flex-shrink: 0;
}

p {
  margin: 1em 0;
  border: none;
  background: none;
  padding-left: 10px; 
  padding-right: 10px;
}

th {  
  background-color: #0288d1;
  color: white;
  font-weight: bold; 
  font-size: 20px;
}

select {
  
  width: fit-content;
}

.app_clsMenuBarLogo {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  margin: 0 0 0 5px;
  padding: 0;
}

.app_clsMenuBarLogo:hover .app_clsSiteName,
.app_clsMenuBarLogo:hover .app_clsTagline {
  text-decoration: none;
}

.clsBlueLink {
  color: #0288d1;
  text-decoration: none;
  padding: 5px 10px;
  font-weight: normal;
}

.clsBlueLink:hover {
  text-decoration: underline;
}

label {
  color: #0288d1;
}

.appclsLeftAlign {
  text-align: left;
}

.clsBlueContainer {
  background: linear-gradient(160deg, #f3faff, #e3f2fd);
  border: 1px solid #d7ecfc;
  margin: 20px;
  padding-top: 5px;
  padding-right: 20px;
  padding-bottom: 10 px;
  padding-left: 20px;
  overflow-x: hidden; /* Prevents any child from spilling out */
  border-radius: 20px;
  box-shadow: 0 6px 20px rgba(2, 136, 209, 0.10);
}



.clsButton {
  border: none;
  border-radius: 10px;
  box-sizing: border-box;
  cursor: pointer;
  color: white;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: bold;
  /* Was a fixed height:40px with one-line text, so a long label spilled out of the button. Now 40px is only the
     minimum: the button grows (and the text wraps) when the label needs more room. A single-line label looks the same. */
  height: auto;
  min-height: 40px;
  max-width: 100%;
  line-height: 1.2;
  white-space: normal;
  margin: 10px;
  padding: 8px 16px;
  text-align: center;
  text-decoration: none;
}

/* A link-based .clsButton the browser has already visited would otherwise pick up
   the default purple a:visited color, which beats the plain .clsButton rule above
   on specificity — force it to stay white regardless of visited state. */
a.clsButton:visited {
  color: white;
}

.clsBlueButton {
  background-color: #0288d1;
}

/* House rounded-pill CTA (see docs/design.md "Buttons"): border-radius 25px,
   flex-centered so icon+text sit centered top-to-bottom inside the fixed
   .clsButton height — no pulse/blink, just the shape. */
.clsRoundButton {
  border-radius: 25px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s, background 0.2s;
}

.clsRoundButton:hover {
  transform: scale(1.05);
}

.clsRoundButtonSmall {
  height: auto;
  padding: 6px 16px;
  font-size: 0.85em;
}



.clsBlueButton:hover {
  background-color: #01579b;
}

.clsBlueButton:disabled {
  background-color: #b0bec5;
  cursor: not-allowed;
}

button:disabled,
input[type="submit"]:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  pointer-events: none;
}

.clsCancelButton {
  background: #0288d1;
}

clsCancelButton:hover {
  background: #009ACD;
}

/* Debug Panel */
.clsErrorMessage {
  background-color: #d81b60;
  color: white;
  padding: 10px;
  border-radius: 4px;
  margin-bottom: 15px;
  border: 1px solid #a11245;
}

.clsDebugToggle {
  cursor: pointer;
  color: #0288d1;
  margin: 10px 0;
  font-weight: bold;
  text-decoration: none;
  display: inline-block;
}

.clsDebugToggle:hover {
  color: #01579b;
}

.clsDebugPanel {
  display: none;
  background-color: #fff3cd;
  padding: 10px;
  margin: 10px 0;
  border-radius: 5px;
}

.clsDebugPanel.active {
  display: block;
}

.debug {
  background-color: #fff3cd;
  padding: 10px;
  margin: 10px 0;
  border-radius: 5px;
}

.debug pre {
  font-size: 1em;
  white-space: pre-wrap;
}


.notice, .error {
  padding: 10px;
  margin: 10px 0;
  border-radius: 5px;
}

.notice {
  background-color: #dff0d8;
  color: #3c763d;
}

.error {
  background-color: #f2dede;
  color: #a94442;
}

/* General Styles */
h1 {
  color: #0288d1; /* Text color */
  font-size: 1.8em;
}

h2, h3 {
  color: #0288d1; /* Text color */
}



h1 span.clsEmoji, p span.clsEmoji {
  font-size: 1em;
  vertical-align: middle;
}

ul {
  list-style-type: none;
  padding: 0;
}

hr {
  border: 0;
  border-top: 1px solid #ccc;
  margin: 10px 0;
}

/* Menu Bar — single row, fixed height at every browser width. Content adapts via
   a native <select> dropdown on narrower screens instead of wrapping the row
   taller or hiding behind a hamburger. Notifications + Log Out are pinned at the
   far right and never move into the wide-list/select swap. */
/* Site-wide free-tier upgrade banner (layouts/application.html.erb) — shown on
   every page above the nav for logged-in, non-admin, free-tier users. Not
   sticky (unlike .clsMenuBar below it) so it scrolls away with the page,
   matching common "upgrade nag" banner behavior. Dismiss is client-side only
   (localStorage) — reappears after 24h, no backend/DB involvement needed. */
.us-upgrade-banner {
  flex-shrink: 0;
  background: linear-gradient(90deg, #f5a623, #e8590c);
  color: #fff;
  padding: 6px 16px;
  text-align: center;
}

/* Plain inline link, flowing right after the banner text (wraps onto its own
   line only if there's no room) rather than a separate pill box — keeps the
   banner down to as few lines as possible. */
.us-upgrade-banner-btn {
  color: #fff;
  font-weight: bold;
  text-decoration: underline;
  white-space: nowrap;
}

.us-upgrade-banner-btn:hover {
  color: #fff3cd;
}

.us-upgrade-banner-dismiss {
  background: none;
  border: none;
  color: #fff;
  font-size: 1.3em;
  line-height: 1;
  cursor: pointer;
  padding: 0 4px;
}


.clsMenuBar {
  position: sticky;
  top: 0;
  z-index: 1000;
  /* .container and .f_site-footer are both flex-shrink:0 (below); without
     this, .clsMenuBar was the ONLY shrinkable item in body's flex column,
     so it silently absorbed the entire squeeze whenever content needed more
     room than min-height:100vh — collapsing the nav to almost nothing. */
  flex-shrink: 0;
  background: linear-gradient(180deg, #007bff, #00ddeb);
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  color: white;
  padding: 2px 12px;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}

/* Same red shown for admins in the Android app's header bar (admin_header_500/700). */
.clsMenuBarAdmin {
  background: linear-gradient(180deg, #B71C1C, #7F0000);
}

.app_clsMenuBarLogo {
  flex-shrink: 0;
}

.app_clsMenuBarLogo a {
  color: white;
  font-size: 1.6em;
  text-decoration: none;
  font-weight: bold;
  display: block;
  line-height: 1.15;
}

.app_clsTagline {
  font-size: 13px;
}

.app_clsMenuBarLogo a span.clsEmoji, .UserName span.clsEmoji {
  font-size: 1em;
  vertical-align: middle;
}

/* Wide screens: full inline link row — hidden entirely below the breakpoint
   (the <select> takes over) so this never has to wrap or grow the bar taller. */
.clsMenuWide {
  display: none;
  list-style: none;
  flex-wrap: nowrap;
  align-items: center;
  margin: 0;
  padding: 0;
  gap: 16px;
  overflow: hidden;
  min-width: 0;
}

.clsMenuLink {
  white-space: nowrap;
}

/* Red = "admin-only" everywhere on the site. */
.clsAdminMenuItem {
  background: #fdecea;
  border-radius: 6px;
  padding: 2px 8px;
}

.clsAdminMenuItem a {
  color: #c0392b !important;
}

/* Reusable admin-only inline badge/callout — red-shaded background + bold
   red border (not just red text — see docs/design.md "Admin-only marking"). */
.clsAdminOnlyBadge {
  display: inline-block;
  background-color: #fdecea;
  border: 2px solid #c0392b;
  border-radius: 6px;
  padding: 6px 14px;
  color: #c0392b;
}

/* Block-level version of the above — for wrapping a whole admin-only section
   (several lines/fields), not just a single inline stat. */
.clsAdminOnlyBox {
  background-color: #fdecea;
  border: 2px solid #c0392b;
  border-radius: 6px;
  padding: 12px 16px;
  margin: 12px 20px;
}

.clsMenuBar ul a {
  color: white;
  text-decoration: none;
  font-size: 15pt;
  font-weight: bold;
}

.clsMenuBar ul a:hover {
  color: #e3f2fd;
}

.dashboard-highlight a {
  color: #ffe066;
}

/* Narrow screens: one dropdown control instead of a hamburger — same items,
   same popularity order, but a fixed one-line height regardless of item count. */
.clsMenuSelect {
  display: none;
  background: #0288d1;
  color: white;
  border: 1px solid #01579b;
  border-radius: 6px;
  padding: 6px 10px;
  font-size: 15pt;
  font-weight: bold;
  max-width: 45vw;
}

.clsPinnedRight {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 12px;
}

.notification-link {
  color: white;
  text-decoration: none;
  font-size: 15pt;
  font-weight: bold;
  white-space: nowrap;
}

.notification-link:hover {
  color: #e3f2fd;
}

.notification-count {
  display: inline-block;
  background: #ffe066;
  color: #4d3800;
  border-radius: 999px;
  padding: 0 6px;
  font-size: 0.8em;
  font-weight: bold;
  vertical-align: middle;
  margin-left: 2px;
}

.clsPinnedLogout {
  display: inline-flex;
  align-items: center;
  color: white;
  text-decoration: none;
  font-size: 0.85em;
  font-weight: bold;
  white-space: nowrap;
  background: rgba(255, 255, 255, 0.15);
  border-radius: 999px;
  padding: 6px 14px;
}

.clsPinnedLogout:hover {
  background: rgba(255, 255, 255, 0.28);
  color: white;
}

/* Chip-style account button (avatar + name in a rounded pill), similar to
   YouTube's signed-in account button. */
.clsPinnedUser {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: white;
  text-decoration: none;
  font-size: 14pt;
  font-weight: bold;
  white-space: nowrap;
  max-width: 22vw;
  background: rgba(255, 255, 255, 0.15);
  border-radius: 999px;
  padding: 4px 14px 4px 4px;
  vertical-align: middle;
}

.clsPinnedUser:hover {
  background: rgba(255, 255, 255, 0.28);
  color: white;
}

.clsPinnedAvatar {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
  display: block;
}

.clsPinnedAvatarFallback {
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.3);
  font-size: 16px;
}

.clsPinnedUserName {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* The wide inline row now shows down to a much lower, genuinely-mobile
   threshold — JS (app/javascript/application.js, initNavOverflow) measures
   how many items actually fit and moves whichever don't into a small "More"
   dropdown next to the row, so the bar always uses the space it has instead
   of switching all-or-nothing between the full row and the full dropdown. */
@media (min-width: 700px) {
  .clsMenuWide {
    display: flex;
  }
}

@media (max-width: 699px) {
  /* Phones: the ☰ button replaces the visible select. The select stays in the page (visually hidden, NOT
     display:none — the JS that adds the bell/avatar/Log Out options checks whether it is displayed) and is
     what the hamburger panel reads its items from. */
  .clsMenuSelect:not(.clsMenuOverflow) {
    display: inline-block;
    position: absolute;
    width: 1px;
    height: 1px;
    opacity: 0;
    pointer-events: none;
    overflow: hidden;
  }

  .clsHamburger {
    display: inline-flex;
  }

  /* Below the mobile threshold the full .clsMenuSelect already covers every
     item (wide row is hidden entirely), so the "More" overflow select would
     just be a redundant second dropdown — force it off regardless of what
     JS last set. */
  .clsMenuOverflow {
    display: none !important;
  }
}

.clsMenuOverflow {
  flex-shrink: 0;
  max-width: 30vw;
}


.clsNoAnswer {
  font-size: 1.1em;
  color: #555;
  margin: 20px 0;
}

.clsNoAnswer a {
  margin-left: 5px;
}


.clsAnswersTable {
  width: 100%;
  border-collapse: collapse;
  margin-top: 20px;
  background-color: #f0f8ff;
}

.clsAnswersTable td {
  border: 1px solid #ccc;
  padding: 10px;
  text-align: left;
}



.clsAnswersTable tr:hover {
  background-color: #e0f0ff;
}

.clsUserTable {
  width: 100%;
  border-collapse: collapse;
  background-color: #f0f8ff;
  border-radius: 8px;
  overflow: hidden;
}

.clsUserTable th,
.clsUserTable td {
  text-align: left;
  border-bottom: 1px solid #ddd;
}

.clsUserTable th {
  background-color: #0288d1;
  color: white;
}

.clsUserTable tr:hover {
  background-color: #e0f0ff;
}

.app_RedText {
  color: #d32f2f;
}

.app_clsRedButton {
  background-color: #d81b60;
}

.app_clsRedButton:hover {
  background-color: #a11245;
}

.app_clsRedButton.disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.clsSearchForm {
  margin: 15px 0;
  display: inline-block;
}

.app_clsSearchInput {
  padding: 6px;
  border: 1px solid #ddd;
  border-radius: 5px;
  max-width: 100%;
}

.app_clsSearchInput:focus {
  outline: none;
  border-color: #0288d1;
  box-shadow: 0 0 5px rgba(2, 136, 209, 0.3);
}


.clsUserTable th:nth-child(1), .clsUserTable td:nth-child(1) { width: fit-content; } /* UserName */
.clsUserTable th:nth-child(2), .clsUserTable td:nth-child(2) { width: fit-content; } /* Email */
.clsUserTable th:nth-child(3), .clsUserTable td:nth-child(3) { width: 15%; } /* Tier */
.clsUserTable th:nth-child(4), .clsUserTable td:nth-child(4) { width: 15%; } /* Activity Points */
.clsUserTable th:nth-child(5), .clsUserTable td:nth-child(5) { width: 10%; } /* Admin */
.clsUserTable th:nth-child(6), .clsUserTable td:nth-child(6) { width: 15%; } /* Actions */

.clsFormRow {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  margin-bottom: 15px;
}

.app_clsFormField {
  flex: 1;
}

.app_clsFormField label {
  display: block;
  margin-bottom: 5px;
  color: #0288d1;
}



.app_clsFormField input[type="text"] {
  padding: 6px;
  border: 1px solid #ddd;
  border-radius: 5px;
}

.app_clsFormField input[type="text"]:focus {
  outline: none;
  border-color: #0288d1;
  box-shadow: 0 0 5px rgba(2, 136, 209, 0.3);
}
.clsAdminYes {
  color: #d81b60; 
}
.flash.notice {
  background-color: #d81b60;
  color: white;
  font-weight: bold;
  padding: 10px;
  margin-bottom: 15px;
  border-radius: 5px;
  text-align: center;
}
.flash-alert {
  background-color: #f2dede;
  color: #a94442;
  padding: 10px;
  margin-bottom: 10px;
}

.clsFormGroup {
  margin-right: auto;
  width: fit-content;
  text-align: center;
}
.clsFormGroupCentered {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
}
.clsActions {
  gap: 10px;
  align-items: center;
  margin-top: 20px;
}
.app_clsDeleteButton {
  background-color: #ff4d4d;
  color: white;
  padding: 8px 16px;
  text-decoration: none;
  border-radius: 4px;
}
.app_clsDeleteButton:hover {
  background-color: #cc0000;
}

/* Custom Yes/No confirm modal replacing the native OK/Cancel confirm() dialog
   for every data-turbo-confirm link/button site-wide (see application.js). */
.clsConfirmOverlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9999;
}
.clsConfirmBox {
  background: white;
  border-radius: 10px;
  padding: 24px;
  max-width: 400px;
  width: 90%;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
}
.clsConfirmMessage {
  white-space: pre-line;   /* keeps the line breaks of longer, bulleted messages */
  margin: 0 0 20px;
  font-size: 1em;
  color: #222;
}
.clsConfirmActions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
}
.clsConfirmActions button {
  padding: 8px 20px;
  border-radius: 20px;
  border: none;
  font-size: 0.95em;
  cursor: pointer;
}
.clsConfirmYes {
  background-color: #dc3545;
  color: white;
}
.clsConfirmYes:hover {
  background-color: #b02a37;
}
.clsConfirmNo {
  background-color: #e9ecef;
  color: #222;
}
.clsConfirmNo:hover {
  background-color: #dde1e5;
}




/* ☰ hamburger (phones only) — opens .clsHamburgerPanel, a list of the same items as the menu select. */
.clsHamburger {
  display: none; /* shown on phones by the max-width:699px rule above — keep this BEFORE that rule's cascade by using the min-width block below */
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.2);
  color: white;
  border: 1px solid rgba(255, 255, 255, 0.6);
  border-radius: 6px;
  font-size: 20pt;
  line-height: 1;
  padding: 2px 12px;
  cursor: pointer;
  flex-shrink: 0;
}

.clsHamburgerPanel {
  position: fixed;
  left: 0;
  right: auto;
  width: max-content;   /* only as wide as the longest item (e.g. "Settings"), not the whole phone... */
  min-width: 160px;
  max-width: 100vw;     /* ...but never wider than the screen */
  border-right: 3px solid #0288d1;
  border-bottom-right-radius: 12px;
  z-index: 1100;
  max-height: calc(100vh - 70px); /* fallback — JS sets the real height from the visible viewport */
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
  touch-action: pan-y;
  background: #ffffff;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3);
  border-bottom: 3px solid #0288d1;
}

.clsHamburgerPanel button {
  display: block;
  width: 100%;
  text-align: left;
  background: none;
  border: 0;
  border-bottom: 1px solid #e3eef7;
  padding: 14px 18px;
  font-size: 12pt;   /* a tad smaller than the old 15pt, then a little more (maintainer's request, 2026-10-13) */
  color: #01579b;
  cursor: pointer;
  white-space: nowrap;
}

.clsHamburgerPanel button.clsHamburgerCurrent {
  background: #e3f2fd;
  font-weight: bold;
}

.clsHamburgerPanel button.clsHamburgerAdmin {
  color: #c0392b;
  background: #fdecea;
}

@media (max-width: 699px) {
  .clsHamburger { display: inline-flex; }
}

/* Phones: with the ☰ button added to the left, the full-size site name no longer fit and "NomadConnections" was
   clipped to "NomadConnection". Scale the name with the screen width instead. */
@media (max-width: 699px) {
  /* ☰ first, then the name right beside it (left-aligned); the bell/avatar/Log Out group stays pinned right. */
  .clsMenuBar { justify-content: flex-start; }
  .clsPinnedRight { margin-left: auto; }
  .app_clsMenuBarLogo { flex-shrink: 1; min-width: 0; }
  .app_clsSiteName { font-size: clamp(13px, 5vw, 20px); white-space: nowrap; }
  .clsHamburger { font-size: 18pt; padding: 2px 10px; }
}

/* ===== NAVY THEME (menu bar) — added to match the login/sign-up cards. TO REVERT: delete everything from this
   comment down to "END NAVY THEME" (or restore ~/tribe_test_backups/app/assets/stylesheets/application.css.bak_navytheme_*). ===== */
.clsMenuBar:not(.clsMenuBarAdmin) {
  background: linear-gradient(180deg, #0b2a5b, #01579b);
}
/* ===== END NAVY THEME ===== */

/* ===== PHONE TEXT SCALE (site-wide) — everything inside .container (page content) is shown ~13% smaller on phones.
   Sizes in the stylesheets are fixed pt values, so this scales the whole content area (text, spacing, images)
   together instead of editing hundreds of font-size rules. The menu bar and footer are sized separately.
   Deliberately below the 15pt floor in docs/design.md, at the maintainer's request (2026-10-05).
   TO REVERT: delete this block (or change 0.87 toward 1), or restore ~/tribe_test_backups/app/assets/stylesheets/
   application.css.bak_phonezoom_*. ===== */
@media (max-width: 699px) {
  .container { zoom: 0.87; }
}
/* ===== END PHONE TEXT SCALE ===== */

/* Phones: the top bar is only ☰ + the site name. The bell / username / Log Out are hidden here (no flash before JS runs)
   and offered inside the ☰ list instead (see checkPinnedOverflow in application.js). */
@media (max-width: 699px) {
  /* Phones: only the 🔔 bell (and its count) shows on the right of the bar; username + Log Out live in the ☰ list. */
  .clsPinnedRight { display: flex !important; gap: 0; }
  .clsPinnedUser, .clsPinnedLogout { display: none !important; }
  .clsPinnedRight .notification-link { font-size: 14pt; padding: 0 4px; }
}

/* ===== PHONE SIDE MARGIN = 10px (docs/design.md "Layout", 2026-10-07) =====
   Phones only. Page wrappers go full width with ~10px on each side. The `vw` max-widths used by a few
   pages are cancelled here because .container's zoom (0.87, above) also scales vw, leaving wide gutters.
   Side values only — top/bottom margins/padding are left as each page sets them.
   TO REVERT: delete this block, or restore ~/tribe_test_backups/app/assets/stylesheets/application.css.bak_*. */
@media (max-width: 800px) {
  .clsBlueContainer { margin-left: 10px; margin-right: 10px; padding-left: 10px; padding-right: 10px; }
  .question-request-container { max-width: none; margin-left: 10px; margin-right: 10px; padding-left: 10px; padding-right: 10px; }
  .w_container { max-width: none; }
  .clsQuestsContainer.gsp_page { max-width: none; }
  .dq_clsContainer { max-width: none; }
}
/* ===== END PHONE SIDE MARGIN ===== */

/* ===== NO SIDEWAYS SLIDING ON PHONES (docs/design.md "No sideways sliding", 2026-10-13) — site-wide safety net.
   Whatever pokes out past the screen on a phone is cut off instead of letting the page slide left/right. Set on <html> only (it
   becomes the viewport's rule), so position: sticky headers and horizontally scrollable tables inside their own boxes keep working.
   This only hides the symptom — each page should still be fixed at the source when it's worked on. TO REVERT: delete this block. */
@media (max-width: 800px) {
  html { overflow-x: hidden; }
}
/* ===== END NO SIDEWAYS SLIDING ===== */

/* ===== PAGE TOP/BOTTOM SPACING (docs/design.md "Layout", 2026-10-07) — from the Smoke Signal page, now site-wide.
   10px under the menu bar · 8px blue inside the bottom · 8px white above the footer (footer.css margin-top: 8px).
   Page wrappers that are direct children of .container only. Cards nested deeper in a wrapper div keep their own
   bottom margin. TO REVERT: delete this block and set .f_site-footer margin-top back to 40px in footer.css,
   or restore the application.css.bak_* / footer.css.bak_* in ~/tribe_test_backups/. ===== */
.container > .clsBlueContainer,
.container > .db_dashboard-page > .clsBlueContainer { margin-top: 10px; margin-bottom: 8px; padding-bottom: 8px; }
.container > .clsBlueContainer > :last-child,
.container > .db_dashboard-page > .clsBlueContainer > :last-child { margin-bottom: 0; }
.container > .question-request-container,
.container > .hp_page { margin-top: 10px; margin-bottom: 8px; }
/* ===== END PAGE TOP/BOTTOM SPACING ===== */

/* Phones: smaller "Free plan — upgrade" banner so it takes less room (maintainer's request, 2026-10-07).
   Below the 15pt floor on purpose. TO REVERT: delete this block. */
@media (max-width: 699px) {
  .us-upgrade-banner { font-size: 10pt; line-height: 1.3; padding: 3px 10px; }
}

/* The bell in the menu bar pulses while it has a number on it (new notifications). Pure CSS: it follows the red count badge, which the
   page script adds / removes as the count changes, so no extra script is needed. Reduced-motion settings turn the motion off. */
.notification-link:has(.notification-count) .notification-icon {
  display: inline-block;
  transform-origin: 50% 12%;
  animation: bell_pulse 1.8s ease-in-out infinite;
}
@keyframes bell_pulse {
  0%, 55%, 100% { transform: scale(1) rotate(0deg); }
  62% { transform: scale(1.18) rotate(-14deg); }
  70% { transform: scale(1.18) rotate(12deg); }
  78% { transform: scale(1.12) rotate(-8deg); }
  86% { transform: scale(1.08) rotate(5deg); }
}
@media (prefers-reduced-motion: reduce) {
  .notification-link:has(.notification-count) .notification-icon { animation: none; }
}


/* Yes/No pop-ups that pass a title (e.g. "Stop sharing your location?"): the question is bold, and on a phone the explanation under it
   is a little smaller. Pop-ups without a title are unchanged. TO REVERT: delete this block. */
.clsConfirmTitle { font-weight: bold; font-size: 1.1em; margin: 0 0 8px; color: #111; }
@media (max-width: 800px) {
  .clsConfirmBox.clsConfirmHasTitle { padding: 18px 16px; }
  .clsConfirmBox.clsConfirmHasTitle .clsConfirmMessage { font-size: 0.82em; line-height: 1.35; margin-bottom: 14px; }
  .clsConfirmBox.clsConfirmHasTitle .clsConfirmTitle { font-size: 1.05em; }
}

/* ===== PHONE LOG IN BUTTON (signed out, top right of the bar) — 2026-10-26 =====
   Same pill look as the signed-in Log Out button. Phones only (wider screens show Log In / Sign Up in the menu row).
   Hidden below 320px wide: measured with the real fonts, ☰ + "NomadConnections" (its size scales with the screen) + this
   button need about 298px, so 320px keeps a ~13px safety margin. 320px is also an iPhone with "Display Zoom" turned on. */
.clsMobileLogin { display: none; }
@media (min-width: 320px) and (max-width: 699px) {
  .clsMobileLogin {
    display: inline-flex;
    align-items: center;
    margin-left: auto;
    flex-shrink: 0;
    color: white;
    text-decoration: none;
    font-size: 13pt;
    font-weight: bold;
    white-space: nowrap;
    background: rgba(255, 255, 255, 0.15);
    border-radius: 999px;
    padding: 6px 12px;
  }
  .clsMobileLogin:hover { background: rgba(255, 255, 255, 0.28); color: white; }
}
/* ===== END PHONE LOG IN BUTTON ===== */

/* Nothing pulses, blinks or bounces for people whose phone / computer is set to "reduce motion" (user, 10/30: "don't pulse it for
   them on any page"). One rule for the whole site — the yellow highlights stay, they just don't move. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}

/* Menu bar at 700-1100px wide (user, 11/2: at 899px the bar showed only the dropdown and none of the menu items, though there was space).
   Cause: the logo, the bell / name / Log Out group (never shrinks) and the "More" dropdown (it could be 30% of the screen wide) used up the
   whole bar, so the script (initNavOverflow) found no room for even one item and moved them ALL into the dropdown. Now: the "More" box is only as
   wide as its label, the items and the logo are a little smaller, and the gaps are tighter, so the most-used items fit on the bar.
   TO REVERT: delete this block. */
@media (min-width: 700px) and (max-width: 1100px) {
  .clsMenuOverflow { width: 6.5em; max-width: 6.5em; padding: 6px 6px; font-size: 13pt; }
  .clsMenuWide { gap: 10px; }
  .clsMenuBar ul a { font-size: 13pt; }
  .app_clsMenuBarLogo a { font-size: 1.3em; }
  .clsPinnedRight { gap: 8px; }
}
