/* Shell + Home page for the logged-in General User "app" experience (layouts/member-app.ejs).
   Separate from member-form.css (which styles the Login/Register/Account form cards) -- this file
   is the app-shell chrome (top brand bar + top icon nav, per the provided mockups -- NOT a bottom
   tab bar) and feed/card layouts, loaded on every app-shell page (Home, Search, Notifications,
   My events; more reuse the same shell later). */

.app-body { background: #f4f2f6; margin: 0; }
.app-shell { min-height: 100vh; display: flex; flex-direction: column; max-width: 720px; margin: 0 auto; background: #f4f2f6; }

.app-header-group { position: sticky; top: 0; z-index: 5; background: #fff; }

/* Home-only row: hamburger (-> Settings) + brand + chat */
.app-topbar { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px 10px; }
.app-hamburger, .app-topbar-chat { display: flex; align-items: center; justify-content: center; color: var(--ink, #101828); }
.app-hamburger .icon, .app-topbar-chat .icon { width: 22px; height: 22px; }
.app-brand { display: inline-flex; align-items: center; justify-content: center; width: 132px; height: 52px; text-decoration: none; color: var(--ink, #101828); }
.app-brand img { width: 100%; height: 100%; object-fit: contain; }

/* the 6-icon row; the active one gets a pink ring around it (matches the provided screens) rather
   than just a color change */
.app-nav { display: flex; align-items: center; justify-content: space-around; padding: 6px 8px 12px; border-bottom: var(--line, 3px solid #000); }
.app-header-group > .app-nav:first-child { padding-top: 14px; }
.app-nav a { display: flex; align-items: center; justify-content: center; width: 38px; height: 38px; border-radius: 50%; border: 2px solid transparent; color: #101828; text-decoration: none; }
.app-nav a.active { color: var(--pink, #ff1493); border-color: var(--pink, #ff1493); }
.app-nav .icon { width: 21px; height: 21px; }

.app-main { flex: 1; padding: 16px 16px 32px; display: flex; flex-direction: column; gap: 22px; }

.app-placeholder { display: grid; place-items: center; gap: 10px; padding: 60px 20px; text-align: center; color: #5b6472; }
.app-placeholder .icon { width: 40px; height: 40px; color: var(--pink, #ff1493); }
.app-placeholder h2 { margin: 0; font-size: 16px; font-weight: 900; color: var(--ink, #101828); }

/* the rail's 3 sections (Jobs for you / Upcoming events / Member perks) are all wrapped in one
   .desktop-home-rail div -- on desktop that div becomes `display:contents` so its children pick up
   .app-main's own 22px gap directly, but on mobile it was a plain block with no gap of its own,
   leaving the sections touching with no space between them. */
.desktop-home-rail { display: flex; flex-direction: column; gap: 22px; }
.home-section { display: flex; flex-direction: column; gap: 10px; }
.home-section-head { display: flex; align-items: center; justify-content: space-between; }
.home-section-head h2 { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 15px; font-weight: 900; text-transform: uppercase; letter-spacing: .3px; }
.home-section-head .icon { width: 18px; height: 18px; color: var(--pink, #ff1493); }
.home-see-all { font-size: 12px; font-weight: 800; text-decoration: underline; color: var(--ink, #101828); }

/* align-items default (stretch) so every card in a row matches the tallest sibling's height --
   a job with a short/no excerpt must not end up visibly shorter than its neighbors (per the
   mockup, every card in the row is the same height). */
.home-hscroll { display: flex; gap: 12px; overflow-x: auto; overflow-y: hidden; padding: 2px 2px 8px; }

/* 62vw lands at ~230px on a 375px-wide phone (the design's target), so nothing changes there; on a
   narrower phone it shrinks WITH the screen instead of staying pinned at 230px (previously a fixed
   flex-basis, which made the Home carousel show barely more than one card, mostly cut off, on a
   small/older device). min() caps it at 230px so it does not keep growing on a tablet-width screen.
   display:flex (not grid): a grid's auto-sized rows leave stretch's extra height as blank space
   BELOW the last row; a flex column lets .job-card-bottom's margin-top:auto claim that space
   instead, so the tags/Apply row stays flush at the bottom of every card, however tall it got. */
.job-card { position: relative; flex: 0 0 min(230px, 62vw); display: flex; flex-direction: column; gap: 6px; padding: 14px; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; }
/* Saved Jobs page: the same card, stacked vertically and full width instead of the Home carousel's
   fixed-width horizontal scroll. */
.job-card-list { display: flex; flex-direction: column; gap: 12px; }
.job-card-list .job-card { flex: 0 0 auto; width: 100%; }
/* the card's own click-to-open-details area: a <button> (Save) can't legally nest inside an <a>,
   so the card is a plain div and this invisible link stretches under everything else instead. */
.job-card-link { position: absolute; inset: 0; z-index: 0; border-radius: inherit; }
.job-card-top { display: flex; align-items: center; justify-content: space-between; }
.job-card-top-right { display: flex; align-items: center; gap: 6px; }
.job-card-avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--pink, #ff1493); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 900; }
.job-save-form { position: relative; z-index: 1; }
.job-card-bookmark { width: 26px; height: 26px; padding: 0; border-radius: 50%; border: 2px solid #000; background: #fff; display: flex; align-items: center; justify-content: center; flex: 0 0 auto; color: var(--ink, #101828); cursor: pointer; }
.job-card-bookmark .icon { width: 13px; height: 13px; }
.job-card-bookmark.active { background: var(--pink, #ff1493); color: #fff; }
.job-badge { font-size: 10px; font-weight: 800; text-transform: uppercase; background: var(--yellow, #ffd700); border: 2px solid #000; border-radius: 999px; padding: 3px 8px; }
.job-card-title { font-weight: 900; font-size: 14px; line-height: 1.3; }
.job-card-meta { display: flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 700; color: #5b6472; }
.job-card-meta .icon { width: 13px; height: 13px; flex: 0 0 auto; }
.job-card-excerpt { margin: 0; font-size: 11px; font-weight: 600; color: #5b6472; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.job-card-bottom { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: auto; padding-top: 2px; }
.job-card-apply { flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #fff; background: #22c55e; border: 2px solid #000; border-radius: 999px; padding: 6px 14px; }
.job-card-applied { flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #5b6472; background: #eef0f2; border: 2px solid #000; border-radius: 999px; padding: 6px 14px; }

/* Wider than .job-card (own flex-basis, not shared) -- with the excerpt removed, the card is just
   image + title/venue/date, so it needs a wider image to not look like a cramped sliver. */
.event-card { flex: 0 0 min(280px, 74vw); display: flex; gap: 10px; align-items: stretch; padding: 12px; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; }
.event-card-image { width: 100px; min-height: 64px; border-radius: 10px; background: #ffe3ef; border: 2px solid #000; display: flex; align-items: center; justify-content: center; color: #ff1493; flex: 0 0 auto; }
.event-card-image .icon { width: 28px; height: 28px; }
.event-card-body { display: grid; gap: 4px; min-width: 0; }
.event-card-date { display: flex; align-items: center; gap: 5px; font-size: 10px; font-weight: 900; text-transform: uppercase; color: var(--pink, #ff1493); }
.event-card-date .icon { width: 12px; height: 12px; flex: 0 0 auto; }
.event-card-meta { display: flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 700; color: #5b6472; }
.event-card-meta .icon { width: 13px; height: 13px; flex: 0 0 auto; }
.event-card-title { font-weight: 900; font-size: 13px; line-height: 1.3; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; }

/* All Events / Saved Events: a bigger card (full-width photo on top) than the compact horizontal
   .event-card above -- same stretched-link + z-index pattern as .job-card, since the Save (heart)
   button is a real interactive control that must not trigger the card's own click-to-open link. */
.event-card-list { display: flex; flex-direction: column; gap: 14px; }
.event-card-big { position: relative; display: flex; flex-direction: column; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; overflow: hidden; }
.event-card-big-link { position: absolute; inset: 0; z-index: 0; }
.event-card-big-photo-wrap { position: relative; }
/* the date badge here is a desktop-only visual (member-desktop.css shows it as a proper overlay);
   on mobile the card's own text meta line already shows the date, so hide the raw unstyled span */
.event-card-big-photo-wrap .desktop-event-date-badge { display: none; }
.event-card-big-photo { width: 100%; height: 160px; object-fit: cover; display: block; }
.event-card-big-photo.placeholder { display: flex; align-items: center; justify-content: center; background: #ffe3ef; color: var(--pink, #ff1493); }
.event-card-big-photo.placeholder .icon { width: 32px; height: 32px; }
.event-card-big-body { display: grid; gap: 6px; padding: 12px 14px 14px; }
.event-card-big-company { display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 800; color: #5b6472; }
.event-card-big-logo { width: 24px; height: 24px; border-radius: 50%; object-fit: cover; border: 2px solid #000; background: #fff; }
.event-card-big-avatar { width: 24px; height: 24px; border-radius: 50%; background: var(--pink, #ff1493); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 900; font-size: 11px; }
.event-card-big-title { font-weight: 900; font-size: 15px; line-height: 1.3; }
.event-card-big-venue { display: flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 700; color: #5b6472; }
.event-card-big-venue .icon { width: 13px; height: 13px; flex: 0 0 auto; }
.event-card-big-meta { display: flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 700; color: #5b6472; }
.event-card-big-meta .icon { width: 13px; height: 13px; flex: 0 0 auto; }
.event-card-big-bottom { display: flex; justify-content: flex-end; margin-top: 4px; }
.event-card-price { font-size: 12px; font-weight: 800; color: #fff; background: #22c55e; border: 2px solid #000; border-radius: 999px; padding: 6px 14px; }
/* scoped to the big card's photo overlay -- the detail page's .event-save-form.detail-save-form
   (a plain flex-row item, see .detail-save-form below) must NOT inherit this absolute positioning */
.event-card-big-photo-wrap .event-save-form { position: absolute; top: 10px; right: 10px; z-index: 1; }
.event-card-bookmark { width: 32px; height: 32px; padding: 0; border-radius: 50%; border: 2px solid #000; background: #fff; display: flex; align-items: center; justify-content: center; flex: 0 0 auto; color: var(--ink, #101828); cursor: pointer; }

/* Offers page: same big-card language as .event-card-big above, no stretched-link/bookmark overlay
   since the whole card has no click-through target of its own -- "Get It Now" is the only action. */
.offer-card-list { display: flex; flex-direction: column; gap: 14px; }
.offer-card { display: flex; flex-direction: column; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; overflow: hidden; }
.offer-card-photo { width: 100%; height: 160px; object-fit: cover; display: block; }
.offer-card-photo.placeholder { display: flex; align-items: center; justify-content: center; background: #ffe3ef; color: var(--pink, #ff1493); }
.offer-card-photo.placeholder .icon { width: 32px; height: 32px; }
.offer-card-body { display: flex; align-items: center; gap: 10px; padding: 12px 14px; }
.offer-card-badge { flex: 0 0 auto; width: 38px; height: 38px; border-radius: 50%; border: var(--line, 3px solid #000); background: #fff; display: flex; align-items: center; justify-content: center; color: #000; }
.offer-card-badge img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
.offer-card-badge .icon { width: 18px; height: 18px; }
.offer-card-text { flex: 1 1 auto; min-width: 0; }
.offer-card-headline { font-weight: 900; font-size: 14px; line-height: 1.3; color: #111; }
.offer-card-desc { font-size: 12px; font-weight: 600; color: #5b6472; margin-top: 2px; }
.offer-card-cta { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; background: var(--pink, #ff1493); color: #fff; font-size: 12px; font-weight: 800; padding: 9px 16px; border-radius: 999px; text-decoration: none; white-space: nowrap; }
.event-card-bookmark .icon { width: 15px; height: 15px; }
.event-card-bookmark.active { background: var(--pink, #ff1493); color: #fff; }

.post-feed { display: grid; gap: 14px; }
.post-card { display: grid; gap: 10px; padding: 14px; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; }
.post-card-head { display: flex; align-items: center; gap: 10px; text-decoration: none; color: inherit; }
.post-avatar { width: 38px; height: 38px; border-radius: 50%; background: var(--yellow, #ffd700); border: 2px solid #000; display: flex; align-items: center; justify-content: center; font-weight: 900; overflow: hidden; }
.post-avatar img { width: 100%; height: 100%; object-fit: cover; }
.post-author { display: grid; gap: 1px; }
.post-author-name { font-weight: 900; font-size: 13px; }
.post-time { font-size: 11px; font-weight: 700; color: #5b6472; }
.post-caption { margin: 0; font-size: 13px; font-weight: 600; line-height: 1.4; white-space: pre-line; }
/* feed collage: the cell count drives the shape, so a 4-image post reads as a 2x2 block instead of
   showing only its first image. Fixed overall height keeps every card in the feed the same size. */
.post-images { display: grid; gap: 3px; height: 210px; border-radius: 12px; overflow: hidden; background: #f1eef4; border: 2px solid #000; cursor: pointer; }
.post-images-1 { grid-template-columns: 1fr; }
.post-images-2 { grid-template-columns: 1fr 1fr; }
.post-images-3, .post-images-4 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
.post-images-3 .post-images-cell:first-child { grid-row: 1 / span 2; }
.post-images-cell { position: relative; display: block; overflow: hidden; min-height: 0; }
.post-images-cell img { width: 100%; height: 100%; object-fit: cover; display: block; }
.post-images-more { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: rgba(16, 24, 40, .55); color: #fff; font-weight: 900; font-size: 22px; }
.post-actions { display: flex; align-items: center; gap: 10px; }
.post-action { display: flex; align-items: center; gap: 6px; border: 2px solid #000; background: #fff; border-radius: 999px; padding: 8px 14px; font-size: 12px; font-weight: 800; color: var(--ink, #101828); cursor: pointer; text-decoration: none; }
.post-action .icon { width: 18px; height: 18px; color: var(--pink, #ff1493); }
.post-action.active { color: var(--pink, #ff1493); }
.post-action.active .icon { color: var(--pink, #ff1493); }
.post-action-share { margin-left: auto; padding: 8px; color: #3538cd; }
.post-action-share .icon { color: #3538cd; }
.post-composer-row { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; text-decoration: none; color: inherit; }
.post-composer-avatar { position: relative; flex: none; }
.post-composer-online { position: absolute; right: -1px; bottom: -1px; width: 10px; height: 10px; border-radius: 50%; background: #22c55e; border: 2px solid #fff; }
.post-composer-input { flex: 1; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 12px 16px; background: #fff; border: var(--line, 3px solid #000); border-radius: 999px; box-shadow: var(--shadow, 4px 4px 0 #000); }
.post-composer-placeholder { font-size: 13px; font-weight: 600; color: #98a2b3; }
.post-composer-input .icon { width: 18px; height: 18px; color: var(--ink, #101828); flex: none; }
.compose-form { display: grid; gap: 18px; padding: 4px 2px; }
.compose-user-row { display: flex; align-items: center; gap: 10px; }
.compose-user-avatar { width: 44px; height: 44px; }
.compose-user-name { font-weight: 900; font-size: 15px; color: var(--ink, #101828); }
.compose-textarea { border: none; outline: none; resize: none; background: none; font: inherit; font-size: 17px; font-weight: 600; color: var(--ink, #101828); min-height: 140px; padding: 0; }
.compose-textarea::placeholder { color: #98a2b3; }
.compose-preview-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px; }
.compose-preview-item { position: relative; display: block; height: 84px; border-radius: 10px; overflow: hidden; background: #f1eef4; border: 2px solid #000; }
.compose-preview-item img { width: 100%; height: 100%; object-fit: cover; display: block; }
.compose-preview-remove-btn { position: absolute; top: 4px; right: 4px; width: 22px; height: 22px; border-radius: 50%; background: rgba(0, 0, 0, .55); color: #fff; border: none; display: flex; align-items: center; justify-content: center; font-size: 15px; line-height: 1; padding: 0; cursor: pointer; }
.compose-warning { background: #ffd9dc; border: 2px solid #000; border-radius: 10px; padding: 10px 12px; font-weight: 700; font-size: 13px; color: #101828; }
.compose-actions { display: grid; gap: 4px; border-top: 2px solid #f1eef4; padding-top: 10px; }
.compose-action-row { display: flex; align-items: center; gap: 14px; padding: 10px 4px; cursor: pointer; font-weight: 800; font-size: 14px; color: var(--ink, #101828); }
.compose-action-icon { display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 8px; background: #eaf7ea; color: #2fa84f; flex: none; }
.compose-action-icon .icon { width: 18px; height: 18px; }
.compose-action-icon--camera { background: #ffe3ef; color: var(--pink, #ff1493); }
.visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.settings-topbar-action { margin-left: auto; border: var(--line, 3px solid #000); border-radius: 999px; background: var(--yellow, #ffd700); box-shadow: var(--shadow, 4px 4px 0 #000); padding: 8px 18px; font-weight: 900; font-size: 13px; color: var(--ink, #101828); cursor: pointer; }
.settings-topbar-action:disabled { background: #e4e4e4; color: #98a2b3; box-shadow: none; cursor: not-allowed; }

.post-detail-card { position: relative; }
.post-detail-owner-actions { margin-left: auto; display: flex; gap: 8px; }
.post-detail-icon-btn { display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 50%; border: 2px solid var(--pink, #ff1493); color: var(--pink, #ff1493); background: #fff; cursor: pointer; text-decoration: none; }
.post-detail-icon-btn .icon { width: 16px; height: 16px; }
/* Detail shows every image at full card width, stacked. The feed's collage crops to fixed-size
   cells so cards stay uniform; here the point is to actually look at the photo, so each one keeps
   its own aspect ratio (max-height only guards against a very tall portrait taking over the page). */
.post-detail-images { display: grid; gap: 10px; }
.post-detail-image { display: block; width: 100%; height: auto; max-height: 70vh; object-fit: contain; background: #f1eef4; border-radius: 12px; border: 2px solid #000; cursor: pointer; }

/* Facebook-style full-screen photo viewer, opened by public/js/photo-lightbox.js on click --
   shared by the feed collage (.post-images) and the Post detail page (.post-detail-image), same
   markup on both mobile and desktop so it needs no @media split. */
.lightbox-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, .92); display: flex; align-items: center; justify-content: center; z-index: 1000; }
.lightbox-overlay[hidden] { display: none; }
.lightbox-image { max-width: 92vw; max-height: 86vh; object-fit: contain; border-radius: 8px; }
.lightbox-close { position: absolute; top: 16px; right: 16px; width: 40px; height: 40px; border-radius: 50%; border: none; background: rgba(255, 255, 255, .15); color: #fff; font-size: 22px; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; }
.lightbox-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 44px; height: 44px; border-radius: 50%; border: none; background: rgba(255, 255, 255, .15); color: #fff; font-size: 28px; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; }
.lightbox-prev { left: 16px; }
.lightbox-next { right: 16px; }
.lightbox-counter { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); color: #fff; font-weight: 700; font-size: 13px; background: rgba(255, 255, 255, .15); padding: 4px 10px; border-radius: 999px; }
body.lightbox-open { overflow: hidden; }
.comment-form { display: flex; gap: 8px; margin: 14px 0; }
.comment-form .input { flex: 1; }
.comment-list { display: grid; gap: 14px; }
.comment { padding: 10px 0; border-top: 2px solid #f1eef4; }
.comment.reply { margin-left: 24px; border-top: none; padding-top: 6px; }
.comment-head { display: flex; align-items: center; gap: 8px; }
.comment-author { font-weight: 800; font-size: 12px; }
.comment-text { margin: 2px 0 6px; font-size: 13px; }
.comment-delete { margin-left: auto; border: none; background: none; padding: 4px; cursor: pointer; color: #98a2b3; }
.comment-delete .icon { width: 14px; height: 14px; }
.reply-form { display: flex; gap: 6px; margin-top: 6px; }
.reply-form .input { flex: 1; min-height: 34px; padding: 6px 10px; }

/* Edit Post's existing-photo thumbnails, styled like Create Post's own .compose-preview-item so
   both pages read as the same design -- a checked box dims the photo and turns its badge pink, a
   quick "this one's marked for removal" signal instead of a plain unstyled checkbox + label. */
.compose-preview-item--removable { position: relative; cursor: pointer; }
.compose-preview-remove { position: absolute; top: 4px; right: 4px; width: 22px; height: 22px; border-radius: 50%; background: rgba(0, 0, 0, .55); display: flex; align-items: center; justify-content: center; }
.compose-preview-remove input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer; }
.compose-preview-remove .icon { width: 12px; height: 12px; color: #fff; pointer-events: none; }
.compose-preview-item--removable:has(input:checked) { opacity: .45; }
.compose-preview-item--removable:has(input:checked) .compose-preview-remove { background: var(--pink, #ff1493); }

/* Search */
.search-bar-form { margin: 0; }
.search-input-wrap { display: flex; align-items: center; gap: 10px; padding: 11px 16px; background: #fff; border: var(--line, 3px solid #000); border-radius: 999px; }
.search-input-wrap .icon { width: 18px; height: 18px; color: #8a8f98; flex: 0 0 auto; }
/* the magnifying glass is a real submit button now (bug: it was a decorative SVG with no way to
   trigger a search) -- reset it to look identical to the plain icon it replaced. */
.search-submit { display: flex; padding: 0; border: none; background: none; cursor: pointer; color: inherit; }
.search-input { flex: 1; min-width: 0; border: none; outline: none; background: none; font: inherit; font-weight: 700; font-size: 14px; color: var(--ink, #101828); }

.search-tabs { display: flex; gap: 8px; overflow-x: auto; padding: 2px 2px 4px; }
.search-tab { flex: 0 0 auto; padding: 8px 16px; border: 2.5px solid #000; border-radius: 999px; background: #fff; font-size: 12px; font-weight: 800; text-decoration: none; color: var(--ink, #101828); text-transform: uppercase; }
.search-tab.active { background: var(--pink, #ff1493); color: #fff; }

.search-results { display: grid; gap: 10px; }
.search-row { display: flex; align-items: center; gap: 12px; padding: 12px 14px; background: #fff; border: var(--line, 3px solid #000); border-radius: 14px; }
.search-row-avatar { flex: 0 0 auto; width: 38px; height: 38px; border-radius: 10px; background: #ffe3ef; color: var(--pink, #ff1493); display: flex; align-items: center; justify-content: center; }
.search-row-avatar.round { border-radius: 50%; background: var(--yellow, #ffd700); color: #000; font-weight: 900; }
.search-row-avatar .icon { width: 18px; height: 18px; }
.search-row-body { flex: 1; min-width: 0; display: grid; gap: 2px; }
.search-row-title { font-weight: 900; font-size: 13px; }
.search-row-sub { font-size: 11px; font-weight: 700; color: #5b6472; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Jobs tab (bottom nav briefcase icon) -- dedicated page, not the generic multi-category Search */
.jobs-search-row { display: flex; align-items: center; gap: 10px; margin: 0; }
.jobs-search-row .search-input-wrap { flex: 1; min-width: 0; }
.search-clear { display: flex; flex: 0 0 auto; color: #8a8f98; }
.search-clear .icon { width: 16px; height: 16px; }
.jobs-filter-btn { flex: 0 0 auto; width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; background: #fff; border: var(--line, 3px solid #000); border-radius: 12px; color: var(--ink, #101828); text-decoration: none; }
.jobs-filter-btn .icon { width: 18px; height: 18px; }
.jobs-filter-btn.active { background: var(--pink, #ff1493); color: #fff; }
.jobs-promo-card { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 16px; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; text-decoration: none; color: var(--ink, #101828); }
.jobs-promo-title { display: block; font-weight: 900; font-size: 15px; }
.jobs-promo-sub { display: block; margin-top: 2px; font-size: 12px; font-weight: 700; color: var(--pink, #ff1493); }
.jobs-promo-card > .icon { width: 22px; height: 22px; flex: 0 0 auto; border: 2px solid #000; border-radius: 50%; padding: 3px; }
.jobs-section-title { margin: 4px 0 0; font-size: 14px; font-weight: 800; color: #5b6472; }
/* no-JS fallback: a plain link (bigger ?shown=), always works on click. jobs-infinite-scroll.js
   turns it into a sentinel it watches instead, so scrolling near it loads more automatically. */
.jobs-load-more { display: block; text-align: center; padding: 10px; font-size: 12px; font-weight: 800; color: var(--pink, #ff1493); text-decoration: none; }
/* sticky, not just the last thing on the page -- the filter must stay reachable without scrolling
   all the way down past however many job cards are in the list. Own background (matching the page)
   so cards scrolling underneath don't show through, and a shadow to separate it from them. */
.jobs-filter-tabs { display: flex; gap: 10px; padding: 10px 2px 2px; position: sticky; bottom: 0; z-index: 2; background: #f4f2f6; box-shadow: 0 -6px 10px -6px rgba(0, 0, 0, .18); }
.jobs-filter-tab { flex: 1; text-align: center; padding: 10px 0; border: 2.5px solid #000; border-radius: 999px; background: #fff; font-size: 13px; font-weight: 800; text-decoration: none; color: var(--ink, #101828); }
.jobs-filter-tab.active { background: var(--yellow, #ffd700); }

/* Notifications */
.notif-list { display: grid; gap: 10px; }
.notif-row { display: flex; align-items: flex-start; gap: 12px; padding: 12px 14px; background: #fff; border: var(--line, 3px solid #000); border-radius: 14px; text-decoration: none; color: inherit; }
.notif-row.unread { background: #fff5f9; border-color: var(--pink, #ff1493); }
.notif-icon { flex: 0 0 auto; width: 34px; height: 34px; border-radius: 50%; background: #ffe3ef; color: var(--pink, #ff1493); display: flex; align-items: center; justify-content: center; }
.notif-icon .icon { width: 17px; height: 17px; }
.notif-body { flex: 1; min-width: 0; display: grid; gap: 3px; }
.notif-text { margin: 0; font-size: 13px; font-weight: 700; line-height: 1.35; }
.notif-time { font-size: 11px; font-weight: 700; color: #8a8f98; }

/* My events */
.my-events-list { display: grid; gap: 10px; margin-top: 12px; }
.my-event-row { display: flex; align-items: center; gap: 12px; padding: 12px 14px; background: #fff; border: var(--line, 3px solid #000); border-radius: 14px; }
.my-event-icon { flex: 0 0 auto; width: 36px; height: 36px; border-radius: 10px; background: #ffe3ef; color: var(--pink, #ff1493); display: flex; align-items: center; justify-content: center; }
.my-event-icon .icon { width: 18px; height: 18px; }
.my-event-body { flex: 1; min-width: 0; display: grid; gap: 2px; }
.my-event-title { font-weight: 900; font-size: 13px; }
.my-event-meta { font-size: 11px; font-weight: 700; color: #5b6472; }
.my-event-status { flex: 0 0 auto; font-size: 10px; font-weight: 900; text-transform: uppercase; padding: 4px 10px; border-radius: 999px; border: 2px solid #000; }
.my-event-status.status-upcoming { background: var(--yellow, #ffd700); }
.my-event-status.status-attended { background: #eaf7ea; }

/* Settings (layouts/member-settings.ejs) -- a plain back-arrow + title header, no icon nav; the
   yellow squared-off back button and row style are specific to this screen in the provided mockup. */
.settings-topbar { display: flex; align-items: center; gap: 16px; padding: 20px 16px 8px; }
.settings-back { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; flex: 0 0 auto; background: var(--yellow, #ffd700); border: var(--line, 3px solid #000); border-radius: 12px; box-shadow: var(--shadow, 4px 4px 0 #000); color: #000; font-size: 20px; font-weight: 900; text-decoration: none; }
.settings-title { margin: 0; font-size: 20px; font-weight: 900; color: var(--ink, #101828); }

.membership-id-banner { display: block; text-align: center; padding: 14px 16px; margin-bottom: 14px; background: var(--pink, #ff1493); color: #fff; font-weight: 800; font-size: 15px; border: var(--line, 3px solid #000); border-radius: 16px; box-shadow: var(--shadow, 4px 4px 0 #000); }
.settings-list { display: grid; gap: 14px; margin-top: 8px; }
.settings-row { display: flex; align-items: center; gap: 14px; width: 100%; padding: 14px 16px; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; box-shadow: var(--shadow, 4px 4px 0 #000); color: var(--ink, #101828); text-decoration: none; font: inherit; }
.settings-row-form { padding: 0; border: 0; box-shadow: none; background: none; }
.settings-row-form button { all: unset; display: flex; align-items: center; gap: 14px; width: 100%; box-sizing: border-box; padding: 14px 16px; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; box-shadow: var(--shadow, 4px 4px 0 #000); color: var(--ink, #101828); cursor: pointer; }
.settings-row-icon { flex: 0 0 auto; width: 38px; height: 38px; border-radius: 50%; border: 2px solid var(--pink, #ff1493); color: var(--pink, #ff1493); display: flex; align-items: center; justify-content: center; }
.settings-row-icon .icon { width: 18px; height: 18px; }
.settings-row-label { flex: 1; font-weight: 800; font-size: 14px; }
.settings-row-chevron { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 50%; border: 2px solid var(--pink, #ff1493); color: var(--pink, #ff1493); display: flex; align-items: center; justify-content: center; }
.settings-row-chevron .icon { width: 15px; height: 15px; }
.settings-row-danger .settings-row-label { color: #ff4d4f; }
.settings-row-danger .settings-row-icon, .settings-row-danger .settings-row-chevron { border-color: #ff4d4f; color: #ff4d4f; }

/* Jobs & Events: the Home cards are links to their details pages now */
.job-card, .event-card { text-decoration: none; color: inherit; }
.job-card-logo { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; border: 2px solid #000; background: #fff; }
.event-card-photo { width: 100px; min-height: 64px; border-radius: 10px; object-fit: cover; border: 2px solid #000; display: block; flex: 0 0 auto; align-self: stretch; }
.btn.small.block.disabled { opacity: .55; text-align: center; cursor: default; }

/* Job & Event details pages (layouts/member-settings, no icon nav) */
.detail-card { display: grid; gap: 14px; padding: 4px 2px 24px; }
.detail-head { display: flex; align-items: center; gap: 12px; }
.detail-save-form { margin-left: auto; flex: 0 0 auto; }
.detail-logo, .detail-logo-fallback { width: 52px; height: 52px; border-radius: 50%; border: 2px solid #000; flex: none; object-fit: cover; background: var(--pink, #ff1493); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 900; font-size: 20px; }
.detail-title { margin: 0; font-size: 17px; font-weight: 900; }
.detail-sub { font-size: 12px; font-weight: 700; color: #5b6472; }
.detail-pills { display: flex; flex-wrap: wrap; gap: 8px; }
.detail-pill { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border: 2px solid #000; border-radius: 999px; background: #fff; font-size: 11px; font-weight: 800; }
.detail-pill .icon { width: 13px; height: 13px; }
/* status color-coding for My Applications/My Events (career.js's statusTone map) */
.detail-pill.status-good { border-color: #16a34a; background: #e9fbf0; color: #16a34a; }
.detail-pill.status-warn { border-color: #d97706; background: #fff7e6; color: #d97706; }
.detail-pill.status-bad { border-color: #dc2626; background: #fef2f2; color: #dc2626; }
.detail-pill.status-neutral { border-color: #5b6472; background: #eef0f2; color: #5b6472; }

/* My Applications / My Events list rows -- was a bare, unstyled .detail-card (the "detail page"
   class reused for list rows); replaced with a proper card matching .event-card-big's language. */
.participation-card-list { display: flex; flex-direction: column; gap: 12px; }
.participation-card { display: flex; gap: 12px; align-items: flex-start; padding: 14px; background: #fff; border: var(--line, 3px solid #000); border-radius: 16px; text-decoration: none; color: inherit; }
.participation-avatar { flex: 0 0 auto; width: 36px; height: 36px; border-radius: 50%; background: var(--pink, #ff1493); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 900; font-size: 15px; }
.participation-card-body { display: grid; gap: 6px; min-width: 0; flex: 1 1 auto; }
.participation-card-title { font-weight: 900; font-size: 15px; line-height: 1.3; }
.participation-card-company { font-size: 12px; font-weight: 700; color: #5b6472; }
.participation-card-bottom { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-top: 2px; }
.participation-card-date { font-size: 11px; font-weight: 600; color: #8a93a3; }

/* Apply/Enroll failure popup (a failed submit -- e.g. missing CV, membership required) is shown
   via SweetAlert2 (action-error-popup.js), themed to match this site's cards: thick black border,
   hard offset shadow, pill-shaped yellow confirm button. The server-rendered <noscript> alert is
   the no-JS fallback (job-detail.ejs / event-detail.ejs), so these rules only need to skin
   SweetAlert2's own DOM, not build a popup from scratch. */
.swal-ls-popup { border: var(--line, 3px solid #000) !important; border-radius: 20px !important; box-shadow: var(--shadow, 4px 4px 0 #000) !important; }
.swal-ls-confirm { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 8px 28px; border: var(--line, 3px solid #000); border-radius: 999px; background: var(--yellow, #ffd700); color: #000; font-size: 13px; font-weight: 900; letter-spacing: .5px; text-transform: uppercase; cursor: pointer; box-shadow: var(--shadow, 4px 4px 0 #000); }

/* Apply/Enroll success screen (shown right after a successful submit, with Home/Details choices) */
.success-card { text-align: center; padding: 40px 8px 24px; }
.success-icon { width: 64px; height: 64px; margin: 0 auto; border-radius: 50%; background: #e9fbf0; color: #16a34a; display: flex; align-items: center; justify-content: center; }
.success-icon .icon { width: 34px; height: 34px; }
/* same screen when the bKash payment did not complete (participation-failed.ejs) */
.success-icon.is-failed { background: #fef2f2; color: #dc2626; }
.success-icon.is-waiting { background: #fff7e6; color: #d97706; }
.success-message { margin: 0; font-size: 13px; font-weight: 600; color: #5b6472; line-height: 1.5; }
.success-actions { display: grid; gap: 10px; margin-top: 10px; }
.detail-tabs { display: flex; gap: 18px; border-bottom: 2px solid #f1eef4; }
.detail-tab { padding: 8px 2px; font-size: 13px; font-weight: 800; color: #5b6472; text-decoration: none; border-bottom: 3px solid transparent; }
.detail-tab.active { color: var(--pink, #ff1493); border-bottom-color: var(--pink, #ff1493); }
.detail-section { display: grid; gap: 8px; }
.detail-section h3 { margin: 0; font-size: 13px; font-weight: 900; text-transform: uppercase; letter-spacing: .3px; }
.detail-section p, .rich-text { margin: 0; font-size: 13px; font-weight: 600; line-height: 1.5; }
.rich-text ul, .rich-text ol { margin: 0; padding-left: 18px; }
.detail-pill-row { display: flex; flex-wrap: wrap; gap: 8px; }
.detail-chip { padding: 5px 12px; border: 2px solid #000; border-radius: 999px; background: var(--pink, #ff1493); color: #fff; font-size: 11px; font-weight: 800; }
.detail-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; margin: 0; }
.detail-summary dt { font-size: 11px; font-weight: 700; color: #5b6472; }
.detail-summary dd { margin: 0; font-size: 13px; font-weight: 800; }
.detail-action { width: 100%; padding: 14px; border: var(--line, 3px solid #000); border-radius: 999px; background: var(--yellow, #ffd700); font-weight: 900; font-size: 14px; box-shadow: var(--shadow, 4px 4px 0 #000); cursor: pointer; text-align: center; }
.detail-action[disabled] { opacity: .6; cursor: not-allowed; box-shadow: none; }
.detail-action-hint { text-align: center; }
.detail-banner { width: 100%; height: 180px; object-fit: cover; border: var(--line, 3px solid #000); border-radius: 14px; display: block; }
.detail-banner-wrap { display: block; cursor: pointer; }
.detail-banner-empty { display: flex; align-items: center; justify-content: center; background: #ffe3ef; color: var(--pink, #ff1493); }
.detail-banner-empty .icon { width: 36px; height: 36px; }
.job-card-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.job-card-tag { font-size: 10px; font-weight: 800; padding: 2px 8px; border-radius: 999px; background: #fff; border: 1.5px solid #3538cd; color: #3538cd; }
