/* 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;
}

/* 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;
}
/* 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;
  overflow-y: auto;
  max-height: 70vh;
  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: 8%; }
.aq_colEventStart   { width: 9%; }
.aq_colExpiration   { width: 9%; }
.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_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;
}

/* 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;
}
/* 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;
  overflow-y: auto;
  max-height: 65vh;
  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; }

/* 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;
}

.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;
}

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

.an_clsYesNoButtons form {
  display: inline;
}

.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 { user-select: all; -webkit-user-select: all; font-family: monospace; font-weight: bold; }
.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: Yes / No / Skip stay on ONE line (they were wrapping onto two). */
@media (max-width: 699px) {
  .an_clsYesNoButtons { flex-wrap: nowrap; gap: 6px; }
  .an_clsYesNoButtons form { flex: 1 1 0; min-width: 0; display: block; }
  .an_clsYesNoButtons .clsButton { width: 100%; padding-left: 4px; padding-right: 4px; 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; }
.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; }
}
/* 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;
  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;
}
.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: 100%;
  max-width: 150px; /* Limits submit button width */
  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; }
/* 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: 4px;
  font-size: 0.8em;
  color: #555;
}
.db_events-who-interested summary {
  cursor: pointer;
  color: #0a58ca;
  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 100%;   /* "☁️ Smoke Signal" on its own line; the status (e.g. "Overdue — was due 3 PM") goes on the next */
}

.db_checkin-status {
  flex: 1;
  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;
}

.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 {
  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;
}

/* 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;
}

.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;
}

.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-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: 1em;
  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; }
}

/* 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_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_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: 10px; padding: 10px; }
  .db_ev_tile { flex-basis: 62px; }
  .db_ev_tile_month, .db_ev_tile_dow { font-size: 13pt; }
  .db_ev_tile_day { font-size: 24pt; }
}

/* "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 */
  }
}
/* 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;
}

/* 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"; }
/* 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; }
}
/* 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 label {
  display: block;
  font-size: 15pt;
  color: #fff;
  margin-bottom: 5px;
}

.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;
}

.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; }
}
.inv_page {
  max-width: 60rem;
  margin: 0 auto;
  padding: 1.5rem;
  font-family: system-ui, -apple-system, sans-serif;
}

.inv_hero_image {
  width: 100%;
  height: 250px;
  object-fit: cover;
}

.inv_header h1 {
  font-size: 2rem;
  color: #007bff;
  margin: 1rem 0;
  text-align: center;
}

.inv_pitch p {
  font-size: 1.1rem;
  line-height: 1.5;
  margin-bottom: 1rem;
}

.inv_form h2 {
  font-size: 1.5rem;
  color: #007bff;
  margin-bottom: 1rem;
}

.inv_link_box, .inv_message_box, .inv_qr_box {
  margin-bottom: 1.5rem;
}

.inv_link_box input {
  width: 100%;
  padding: 0.5rem;
  font-size: 1rem;
  margin-bottom: 0.5rem;
}

.inv_message_box textarea {
  width: 100%;
  height: 100px;
  padding: 0.5rem;
  font-size: 1rem;
  margin-bottom: 0.5rem;
}

.inv_qr_box img {
  max-width: 200px;
}

.inv_reward h2 {
  font-size: 1.5rem;
  color: #007bff;
  margin-bottom: 1rem;
}

.inv_footer {
  text-align: center;
  margin-top: 2rem;
}

.clsBlueButton {
  background-color: #007bff;
  color: white;
  padding: 0.5rem 1rem;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  font-size: 1rem;
  margin: 0.5rem;
}

.clsBlueButton:hover {
  background-color: #0056b3;
}

@media (max-width: 720px) {
  .inv_header h1 {
    font-size: 1.5rem;
  }

  .inv_form h2, .inv_reward h2 {
    font-size: 1.25rem;
  }
}
/* app/assets/stylesheets/referral.scss (or wherever you keep component styles) */

.inv_form.coming-soon {
  position: relative;
  opacity: 0.55;
  pointer-events: none;           /* prevents clicking anything */
  user-select: none;
}

.inv_form.coming-soon .coming-soon-overlay {
  position: absolute;
  inset: 0;
  background: rgba(240, 240, 245, 0.75);
  backdrop-filter: blur(2px);
  z-index: 5;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 12px;
}

.inv_form.coming-soon .coming-soon-content {
  text-align: center;
  padding: 2rem;
  background: white;
  border-radius: 12px;
  box-shadow: 0 4px 20px rgba(0,0,0,0.15);
  max-width: 90%;
}

.inv_form.coming-soon .coming-soon-content h3 {
  margin: 0 0 1rem;
  color: #e74c3c;
  font-size: 1.6rem;
}

.inv_form.coming-soon input,
.inv_form.coming-soon textarea {
  background: #f8f9fa;
  color: #777;
}

.inv_form.coming-soon button {
  opacity: 0.6;
}

/* Optional: make QR code look faded too */
.inv_form.coming-soon .inv_qr_image {
  filter: grayscale(80%) opacity(75%);
}


.clsAnswersContainer {

  margin: 0 auto;
  padding: 20px;
  text-align: center;
}


.clsAnswersTable {
  width: 100%;
  border-collapse: collapse;
  margin-top: 20px;
  user-select: none; /* Prevent text selection */
}

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

.search-form .field {
  margin-bottom: 15px;
}

.clsNoAnswer {
  font-style: italic;
  color: #6c757d;
}

.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;
}
.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; }
/* 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 {
  color: #888;
  font-style: italic;
}

.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; }
/* 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;
  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; }
/* 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 (min-width: 700px) {
  .gsp_more summary { display: none; }   /* nothing to tap on a big screen — it's already open */
}
@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;
}

.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 */

/* ============================================================= */
/* 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_cols_menu { margin: 0 0 10px; }
.pv_cols_menu summary { cursor: pointer; font-weight: bold; padding: 2px 8px; display: inline-block; }
.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): User 6, Page Path 15, Viewed At 15, Session ID / IP / User Agent / Referrer 3 each.
   Query String has no minimum requested, so it just shrinks along with the rest. 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; }
  .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(6ch + 1.2rem); }
  .pv_table th.column4, .pv_table td.column4 { min-width: calc(15ch + 1.2rem); }
  .pv_table th.column5, .pv_table td.column5,
  .pv_table th.column6, .pv_table td.column6,
  .pv_table th.column7, .pv_table td.column7,
  .pv_table th.column8, .pv_table td.column8 { min-width: calc(3ch + 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; }
}
.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;
}
/* 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; }

/* 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;
}
/* 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: 18px; line-height: 1.25; margin-bottom: 8px; }
}
/* 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;
}
/* 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 {
  width: 100%;
  max-width: 420px;
  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; }
}
/* 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);
}

.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 rgba(0, 0, 0, 0.15);
  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_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: 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; box-sizing: border-box; }
}
/* ============================================= */
/* 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 {
  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: 15pt;
  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 ===== */

/* ===== 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; }
}
