/* ============================================================ BOSP EVENTS — Main Stylesheet Best of São Paulo ============================================================ */ /* ============================================================ CSS VARIABLES ============================================================ */ :root { --bosp-black: #000000; --bosp-text: #e8e8e8; --bosp-text-muted: #999999; --bosp-border: #222222; --bosp-hover: #1a1a1a; --bosp-green: #2ECC71; --bosp-green-bg: #0d3320; --bosp-yellow: #F1C40F; --bosp-yellow-bg: #332d00; --bosp-red: #E74C3C; --bosp-red-bg: #330d0d; --bosp-font-body: 'Georgia', 'Times New Roman', serif; --bosp-font-ui: 'Helvetica Neue', Arial, sans-serif; } /* ============================================================ ASTRA THEME OVERRIDES ============================================================ */ body.bosp-events-template { background: var(--bosp-black) !important; } body.bosp-events-template .site-content, body.bosp-events-template .content-area, body.bosp-events-template .ast-container, body.bosp-events-template #content, body.bosp-events-template #primary, body.bosp-events-template .entry-content { background: var(--bosp-black) !important; padding: 0 !important; margin: 0 !important; max-width: 100% !important; } /* Hide Astra page title, breadcrumbs, featured image — keep nav */ body.bosp-events-template .entry-header, body.bosp-events-template .post-thumbnail, body.bosp-events-template h1.entry-title, body.bosp-events-template .ast-breadcrumbs-wrapper, body.bosp-events-template .ast-featured-image { display: none !important; } /* ============================================================ BASE ============================================================ */ .bosp-events-page { background: var(--bosp-black); color: var(--bosp-text); font-family: var(--bosp-font-body); font-size: 16px; line-height: 1.6; margin: 0; padding: 0; } .bosp-events-page *, .bosp-events-page *::before, .bosp-events-page *::after { box-sizing: border-box; } /* ============================================================ TOP BANNER — 50% width, centered, black surround ============================================================ */ .bosp-banner-wrap { background: var(--bosp-black); text-align: center; padding: 12px 0 8px; line-height: 0; } .bosp-top-banner { width: 50%; height: auto; display: inline-block; } /* ============================================================ LANGUAGE BAR — below banner, black background, visible links ============================================================ */ .bosp-lang-bar { background: var(--bosp-black); padding: 6px 20px; border-bottom: 1px solid var(--bosp-border); } /* ============================================================ BANNER (legacy — kept for post pages) ============================================================ */ .bosp-banner { width: 100%; max-height: 25vh; overflow: hidden; display: block; line-height: 0; } .bosp-banner img { width: 100%; max-height: 25vh; object-fit: cover; object-position: center top; display: block; } /* ============================================================ PAGE HEADER — below banner ============================================================ */ .bosp-page-header { padding: 24px 20px 16px; border-bottom: 1px solid var(--bosp-border); } /* Search bar */ .bosp-search-wrap { display: flex; gap: 10px; margin-bottom: 10px; } .bosp-search-input { flex: 1; background: #111111; border: 1px solid #333333; border-radius: 4px; color: var(--bosp-text); font-family: var(--bosp-font-ui); font-size: 15px; padding: 10px 14px; outline: none; transition: border-color 0.2s; } .bosp-search-input::placeholder { color: var(--bosp-text-muted); } .bosp-search-input:focus { border-color: #555555; } /* Search button — sits right of the search input */ .bosp-search-btn { background: var(--bosp-green); color: #000000; font-family: var(--bosp-font-ui); font-size: 14px; font-weight: 700; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; transition: opacity 0.2s; white-space: nowrap; flex-shrink: 0; } .bosp-search-btn:hover { opacity: 0.85; } /* Creator bar — wraps the add event text, minimal padding */ .bosp-creator-bar { padding: 6px 20px 4px; border-bottom: 1px solid var(--bosp-border); } /* Creator text — plain text line */ .bosp-creator-text { font-family: var(--bosp-font-ui); font-size: 13px; color: var(--bosp-text-muted); margin: 0; line-height: 1.5; } .bosp-creator-link { color: var(--bosp-green); text-decoration: none; font-weight: 600; transition: opacity 0.2s; } .bosp-creator-link:hover { opacity: 0.8; text-decoration: underline; } /* Controls row — filter toggle LEFT, search bar RIGHT */ .bosp-controls-row { display: flex; align-items: center; gap: 12px; padding: 8px 20px; border-bottom: 1px solid var(--bosp-border); } .bosp-controls-row .bosp-search-wrap { flex: 1; margin-bottom: 0; } /* Merged row — filter+search LEFT | add event CENTER | language links RIGHT */ .bosp-merged-row { display: flex; align-items: center; gap: 12px; padding: 8px 20px; border-bottom: 1px solid var(--bosp-border); flex-wrap: nowrap; } .bosp-merged-left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; } .bosp-merged-left .bosp-search-wrap { flex: 1; margin-bottom: 0; } .bosp-merged-center { flex-shrink: 0; white-space: nowrap; padding: 0 12px; border-left: 1px solid var(--bosp-border); border-right: 1px solid var(--bosp-border); } .bosp-merged-right { flex-shrink: 0; white-space: nowrap; font-family: var(--bosp-font-ui); font-size: 13px; color: var(--bosp-text-muted); } /* ============================================================ ACTION BAR — compact three-link bar below pinned events ============================================================ */ .bosp-action-bar { display: flex; align-items: center; gap: 0; padding: 6px 20px; border: 1px solid #444444; border-radius: 4px; margin: 8px 20px; font-family: var(--bosp-font-ui); font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; } .bosp-action-item { color: var(--bosp-text) !important; text-decoration: none !important; padding: 4px 12px; white-space: nowrap; cursor: pointer; transition: color 0.2s; } .bosp-action-item:hover { color: var(--bosp-green) !important; } .bosp-action-divider { color: #444444 !important; flex-shrink: 0; } /* Inline search input — hidden until SEARCH BY NAME clicked */ .bosp-inline-search { flex: 1; background: transparent !important; border: none !important; border-left: 1px solid #444444 !important; border-radius: 0 !important; color: var(--bosp-text) !important; font-family: var(--bosp-font-ui); font-size: 11px; padding: 4px 12px !important; outline: none; margin-left: 8px; } .bosp-inline-search::placeholder { color: var(--bosp-text-muted); } /* Filter toggle button */ .bosp-filter-toggle-btn { background: none; border: 1px solid #333; color: var(--bosp-text-muted); font-family: var(--bosp-font-ui); font-size: 13px; padding: 6px 14px; border-radius: 4px; cursor: pointer; transition: border-color 0.2s, color 0.2s, background 0.2s; white-space: nowrap; flex-shrink: 0; } .bosp-filter-toggle-btn:hover { border-color: #555; color: var(--bosp-text); } /* Filter section label — uppercase heading inside filter panel */ .bosp-filter-section-label { font-family: var(--bosp-font-ui); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bosp-text-muted); margin: 0 0 10px; } /* Category filter grid — two columns so cats don't take forever */ .bosp-category-filter-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 6px 16px; } /* Individual category group wrapper */ .bosp-cat-group { display: flex; flex-direction: column; } /* Parent category checkbox — slightly bolder than subcats */ .bosp-cat-parent { font-weight: 600; } /* Subcat list — shown when parent is checked */ .bosp-subcat-list { display: none; padding-left: 18px; margin-top: 4px; border-left: 1px solid #333; } .bosp-subcat-list .bosp-checkbox-label { font-size: 12px; color: var(--bosp-text-muted); } /* Date and time filter row */ .bosp-filter-row { display: flex; gap: 16px; flex-wrap: wrap; } .bosp-filter-field { display: flex; flex-direction: column; gap: 4px; flex: 1; min-width: 140px; } .bosp-filter-field-label { font-family: var(--bosp-font-ui); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bosp-text-muted); } /* Date and time inputs */ .bosp-date-input { background: #111111; border: 1px solid #333333; border-radius: 4px; color: var(--bosp-text); font-family: var(--bosp-font-ui); font-size: 14px; padding: 8px 10px; outline: none; transition: border-color 0.2s; color-scheme: dark; width: 100%; } .bosp-date-input:focus { border-color: #555555; } /* Apply and Clear filter buttons */ .bosp-apply-btn { background: var(--bosp-green); color: #000000; font-family: var(--bosp-font-ui); font-size: 13px; font-weight: 700; padding: 8px 18px; border: none; border-radius: 4px; cursor: pointer; transition: opacity 0.2s; } .bosp-apply-btn:hover { opacity: 0.85; } .bosp-clear-btn { background: none; border: 1px solid #333; color: var(--bosp-text-muted); font-family: var(--bosp-font-ui); font-size: 13px; padding: 8px 18px; border-radius: 4px; cursor: pointer; transition: border-color 0.2s, color 0.2s; } .bosp-clear-btn:hover { border-color: #555; color: var(--bosp-text); } /* Language links — navigate to other language versions of this page */ .bosp-lang-links { font-family: var(--bosp-font-ui); font-size: 13px; color: var(--bosp-text-muted); } .bosp-lang-links a { color: var(--bosp-text); text-decoration: none; margin: 0 6px; transition: color 0.2s; } .bosp-lang-links a:hover, .bosp-lang-links a.active { color: var(--bosp-green); } /* ============================================================ STICKY DATE HEADER ============================================================ */ .bosp-date-header { position: sticky; top: 0; z-index: 100; background: #0d0d0d; border-bottom: 1px solid var(--bosp-border); border-top: 1px solid var(--bosp-border); padding: 10px 20px; font-family: var(--bosp-font-ui); font-size: 13px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bosp-text-muted); } /* ============================================================ ADMIN-PINNED EVENTS — Top of page ============================================================ */ .bosp-pinned-section { border-bottom: 2px solid #222222; margin-bottom: 8px; padding-bottom: 8px; } .bosp-pinned-label { font-family: var(--bosp-font-ui); font-size: 11px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--bosp-text-muted); padding: 12px 20px 4px; } /* ============================================================ EVENT CARD ============================================================ */ .bosp-event-card { display: flex; align-items: flex-start; gap: 16px; padding: 16px 20px; border-bottom: 1px solid var(--bosp-border); opacity: 0; transform: translateY(8px); transition: opacity 0.35s ease, transform 0.35s ease, background 0.15s; } .bosp-event-card.bosp-visible { opacity: 1; transform: translateY(0); } .bosp-event-card:hover { background: var(--bosp-hover); } /* Price color dot */ .bosp-price-dot { flex-shrink: 0; width: 10px; height: 10px; border-radius: 50%; margin-top: 6px; } .bosp-price-dot.green { background: var(--bosp-green); } .bosp-price-dot.yellow { background: var(--bosp-yellow); } .bosp-price-dot.red { background: var(--bosp-red); } /* Event main content */ .bosp-event-body { flex: 1; min-width: 0; } .bosp-event-name { font-size: 17px; font-weight: 700; color: var(--bosp-text); margin: 0 0 4px; line-height: 1.3; } .bosp-event-name a { color: var(--bosp-text); text-decoration: none; } .bosp-event-name a:hover { text-decoration: underline; } .bosp-event-meta { font-family: var(--bosp-font-ui); font-size: 13px; color: var(--bosp-text-muted); margin: 0 0 6px; } .bosp-event-meta span { margin-right: 12px; } .bosp-event-description { font-size: 14px; color: #bbbbbb; margin: 0 0 8px; line-height: 1.5; } /* Price badge */ .bosp-price-badge { display: inline-block; font-family: var(--bosp-font-ui); font-size: 12px; font-weight: 700; padding: 3px 8px; border-radius: 3px; margin-right: 8px; } .bosp-price-badge.green { background: var(--bosp-green-bg); color: var(--bosp-green); } .bosp-price-badge.yellow { background: var(--bosp-yellow-bg); color: var(--bosp-yellow); } .bosp-price-badge.red { background: var(--bosp-red-bg); color: var(--bosp-red); } /* Partner discount */ .bosp-partner-discount { display: inline-block; font-family: var(--bosp-font-ui); font-size: 12px; color: var(--bosp-yellow); border: 1px solid var(--bosp-yellow); padding: 2px 7px; border-radius: 3px; margin-right: 8px; } /* Report link */ .bosp-report-link { font-family: var(--bosp-font-ui); font-size: 11px; color: #555555; text-decoration: none; display: inline-block; margin-top: 6px; } .bosp-report-link:hover { color: var(--bosp-text-muted); } /* ============================================================ PROMOTIONAL CARD — BrasilianArt.com banner, every 7 events ============================================================ */ .bosp-promo-card { display: block; line-height: 0; } .bosp-promo-card a { display: block; } .bosp-promo-card img { width: 100%; height: auto; display: block; border-radius: 4px; } /* ============================================================ SUBMISSION FORM ============================================================ */ /* Outer toggle wrapper — hidden by default, jQuery slides open */ .bosp-form-wrap { padding: 0 20px 24px; } .bosp-submission-form { background: #0d0d0d; border: 1px solid var(--bosp-border); border-radius: 6px; padding: 28px; max-width: 680px; margin: 0 auto; font-family: var(--bosp-font-ui); } .bosp-submission-form h2 { color: var(--bosp-text); font-size: 20px; margin: 0 0 20px; } .bosp-form-group { margin-bottom: 16px; } .bosp-form-group label { display: block; font-size: 13px; font-weight: 700; color: var(--bosp-text-muted); letter-spacing: 0.05em; text-transform: uppercase; margin-bottom: 6px; } .bosp-form-group input, .bosp-form-group textarea, .bosp-form-group select { width: 100%; background: #111111; border: 1px solid #333333; border-radius: 4px; color: var(--bosp-text); font-family: var(--bosp-font-ui); font-size: 15px; padding: 10px 12px; outline: none; transition: border-color 0.2s; } .bosp-form-group select { color-scheme: dark; } .bosp-form-group input:focus, .bosp-form-group textarea:focus, .bosp-form-group select:focus { border-color: #555555; } .bosp-form-group textarea { resize: vertical; min-height: 80px; } .bosp-form-required { color: var(--bosp-red); margin-left: 2px; } .bosp-form-submit { background: var(--bosp-green); color: #000000; font-family: var(--bosp-font-ui); font-size: 15px; font-weight: 700; padding: 12px 28px; border: none; border-radius: 4px; cursor: pointer; transition: opacity 0.2s; width: 100%; margin-top: 8px; } .bosp-form-submit:hover { opacity: 0.85; } .bosp-form-notice { font-size: 12px; color: var(--bosp-text-muted); margin-top: 12px; line-height: 1.5; } /* Error message banner inside the form */ .bosp-form-error { display: none; color: var(--bosp-red); background: var(--bosp-red-bg); padding: 10px 14px; border-radius: 4px; margin-bottom: 16px; font-size: 14px; } .bosp-form-success { padding: 20px; background: var(--bosp-green-bg); border: 1px solid var(--bosp-green); border-radius: 4px; margin-bottom: 16px; } .bosp-form-success h3 { color: var(--bosp-green); font-family: var(--bosp-font-ui); font-size: 18px; font-weight: 700; margin: 0 0 8px; } .bosp-form-success p { color: var(--bosp-text); font-family: var(--bosp-font-ui); font-size: 14px; margin: 0; line-height: 1.5; } /* Honeypot — invisible to humans */ .bosp-honeypot { display: none !important; visibility: hidden !important; } /* ============================================================ CHECKBOX GRID — community/culture and accessibility sections Used in both the public submission form and the WP admin meta box ============================================================ */ .bosp-checkbox-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 8px 16px; } .bosp-checkbox-label, .bosp-form-group .bosp-checkbox-label { display: flex !important; align-items: center; gap: 8px; font-size: 13px; font-weight: 400; color: var(--bosp-text); text-transform: none; letter-spacing: 0; cursor: pointer; line-height: 1.4; } .bosp-checkbox-label input[type="checkbox"], .bosp-checkbox-label input[type="radio"] { /* Override the broad .bosp-form-group input rule so checkboxes and radios don't stretch full-width and don't get the dark bg treatment */ width: auto !important; flex-shrink: 0; background: transparent; border: 1px solid #444444; border-radius: 3px; accent-color: var(--bosp-green); cursor: pointer; margin: 0; padding: 0; } /* Sports conditional fields wrapper — slight indent to signal conditional */ #bosp-sports-fields { border-left: 2px solid #333333; padding-left: 16px; margin-bottom: 16px; } /* Recurrence conditional fields wrapper — same treatment */ #bosp-recurrence-fields { border-left: 2px solid #333333; padding-left: 16px; margin-bottom: 16px; } /* ============================================================ ADMIN CHECKBOX GRID — WordPress admin meta box overrides The admin uses WP's own styles; these keep the grid readable without fighting WP's form-table layout. ============================================================ */ .form-table .bosp-checkbox-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 6px 16px; } .form-table .bosp-checkbox-label { color: #1d2327; /* WP admin text color */ font-size: 13px; font-weight: 400; text-transform: none; letter-spacing: 0; } .form-table .bosp-checkbox-label input[type="checkbox"] { width: auto !important; accent-color: #2271b1; /* WP admin blue */ } /* ============================================================ SCRAPER ADMIN UI (WordPress admin) ============================================================ */ .bosp-sources-table { width: 100%; border-collapse: collapse; font-size: 13px; } .bosp-sources-table th { text-align: left; padding: 8px 12px; border-bottom: 2px solid #dddddd; font-weight: 700; } .bosp-sources-table td { padding: 8px 12px; border-bottom: 1px solid #eeeeee; vertical-align: middle; } .bosp-source-active { color: #2ECC71; font-weight: 700; } .bosp-source-inactive { color: #999999; } /* ============================================================ RESPONSIVE ============================================================ */ @media ( max-width: 600px ) { .bosp-top-banner { width: 80%; } .bosp-controls-row { flex-direction: column; align-items: stretch; gap: 8px; } .bosp-controls-row .bosp-search-wrap { width: 100%; } .bosp-search-wrap { flex-direction: column; } .bosp-search-btn { width: 100%; } .bosp-filter-row { flex-direction: column; } .bosp-filter-field { min-width: 0; } .bosp-category-filter-grid { grid-template-columns: 1fr; } .bosp-event-card { padding: 14px 14px; } .bosp-submission-form { padding: 18px; } /* Single column checkboxes on small screens */ .bosp-checkbox-grid { grid-template-columns: 1fr 1fr; } } @media ( max-width: 360px ) { .bosp-top-banner { width: 95%; } .bosp-checkbox-grid { grid-template-columns: 1fr; } .bosp-category-filter-grid { grid-template-columns: 1fr; } }