From 97ca5e17143e7700e17bf8f5b05a5aee9e9fb688 Mon Sep 17 00:00:00 2001
From: Krystie
Date: Mon, 25 May 2026 15:17:20 -0700
Subject: [PATCH 1/2] Add Beep settings system with Twitter Light mode defaults
and page-level CSS override
- Add class-settings.php with 40+ customizable settings
- Update beep.css to use :root level CSS variables
- Add page-level CSS override to fix Elementor purple gradient
- Update defaults to Twitter Light mode (white background)
---
assets/beep.css | 2006 +++++++++++++----------------------
beep.php | 1 +
includes/class-settings.php | 841 +++++++++++++++
3 files changed, 1586 insertions(+), 1262 deletions(-)
create mode 100644 includes/class-settings.php
diff --git a/assets/beep.css b/assets/beep.css
index 108db19..19413b2 100755
--- a/assets/beep.css
+++ b/assets/beep.css
@@ -1,7 +1,6 @@
/* ============================================================
- Beep — Twitter-style microblog for WordPress
- All rules are scoped under .beep-feed so they don't leak
- into the host theme.
+ Beep — Twitter/X Dark Mode
+ Post and feed styling to match Twitter/X perfectly
============================================================ */
.beep-feed,
@@ -9,107 +8,105 @@
box-sizing: border-box;
}
-.beep-feed {
- --beep-bg: #ffffff;
- --beep-text: #0F1419;
- --beep-text-secondary: #536471;
- --beep-border: #EFF3F4;
- --beep-hover: #F7F9F9;
+:root {
+ /* Default Twitter Dark Mode Palette */
+ --beep-bg: #15202B;
+ --beep-card-bg: #192734;
+ --beep-card-hover: #1C2732;
+ --beep-text: #E7E9EA;
+ --beep-muted: #71767B;
+ --beep-border: #2F3336;
--beep-accent: #1D9BF0;
--beep-accent-hover: #1A8CD8;
--beep-like: #F91880;
--beep-repost: #00BA7C;
- --beep-page-bg: #E6ECF0;
+}
+
+.beep-feed {
+ /* Twitter Dark Mode Palette */
+
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
max-width: 600px;
- margin: 24px auto;
+ margin: 0 auto;
background: var(--beep-bg);
- border: 1px solid var(--beep-border);
- border-radius: 16px;
- overflow: hidden;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
- "Helvetica Neue", Arial, sans-serif;
+ border-left: 1px solid var(--beep-border);
+ border-right: 1px solid var(--beep-border);
color: var(--beep-text);
font-size: 15px;
line-height: 1.4;
-webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ min-height: 100vh;
}
-/* ---------- Header ---------- */
+/* Header */
.beep-feed-header {
- padding: 14px 20px;
+ padding: 16px 20px;
border-bottom: 1px solid var(--beep-border);
- font-size: 20px;
- font-weight: 800;
- background: rgba(255, 255, 255, 0.85);
- backdrop-filter: blur(12px);
display: flex;
align-items: center;
- gap: 10px;
+ justify-content: space-between;
position: sticky;
top: 0;
z-index: 10;
+ background: rgba(21, 32, 43, 0.85);
+ backdrop-filter: blur(12px);
}
-.beep-feed-header-text {
+.beep-feed-header-title {
font-size: 20px;
font-weight: 800;
color: var(--beep-text);
- white-space: nowrap;
+ letter-spacing: -0.5px;
}
-.beep-feed-header .beep-logo {
- height: 36px;
- width: auto;
- max-width: 100%;
- flex-shrink: 0;
- object-fit: contain;
- display: block;
-}
-
-/* ---------- Notices ---------- */
-.beep-notice {
- padding: 24px 20px;
+/* Nav tabs */
+.beep-top-nav {
+ display: flex;
border-bottom: 1px solid var(--beep-border);
+}
+
+.beep-nav-tab {
+ flex: 1;
+ background: transparent;
+ border: 0;
+ padding: 16px 0;
+ font-family: inherit;
+ font-size: 15px;
+ font-weight: 700;
+ color: var(--beep-muted);
+ cursor: pointer;
+ position: relative;
text-align: center;
+ transition: background-color 0.15s ease, color 0.15s ease;
}
-.beep-notice p {
- margin: 0 0 12px;
- font-size: 16px;
+.beep-nav-tab:hover {
+ background: var(--beep-card-hover);
+ color: var(--beep-text);
}
-.beep-notice-banned {
- color: var(--beep-text-secondary);
- font-style: italic;
+.beep-nav-tab.is-active {
+ color: var(--beep-text);
}
-/* ---------- Avatars ---------- */
-.beep-feed .beep-avatar {
- width: 48px !important;
- height: 48px !important;
- min-width: 48px !important;
- max-width: 48px !important;
- border-radius: 50% !important;
- flex-shrink: 0;
- background: #ccd6dd;
- object-fit: cover !important;
- aspect-ratio: 1 / 1 !important;
- display: block !important;
+.beep-nav-tab.is-active::after {
+ content: '';
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ height: 4px;
+ background: var(--beep-accent);
+ border-radius: 9999px;
}
-.beep-feed .beep-avatar-sm {
- width: 36px !important;
- height: 36px !important;
- min-width: 36px !important;
- max-width: 36px !important;
-}
-
-/* ---------- Compose ---------- */
+/* Compose area */
.beep-compose {
display: flex;
gap: 12px;
- padding: 16px;
+ padding: 16px 20px;
border-bottom: 1px solid var(--beep-border);
}
@@ -123,102 +120,167 @@
border: 0 !important;
outline: 0 !important;
resize: none !important;
- background: #ffffff !important;
+ background: transparent !important;
font-family: inherit !important;
font-size: 18px !important;
- line-height: 1.4 !important;
+ line-height: 1.5 !important;
color: var(--beep-text) !important;
padding: 8px 0 !important;
- min-height: 32px;
+ min-height: 52px;
overflow: hidden;
box-shadow: none !important;
+ caret-color: var(--beep-accent);
}
.beep-feed .beep-input::placeholder {
- color: var(--beep-text-secondary) !important;
- opacity: 1 !important;
+ color: var(--beep-muted) !important;
}
-.beep-compose-footer,
-.beep-reply-footer {
+.beep-compose-footer {
display: flex;
- justify-content: flex-end;
+ justify-content: space-between;
align-items: center;
- gap: 12px;
+ margin-top: 12px;
+ padding-top: 12px;
border-top: 1px solid var(--beep-border);
- padding-top: 10px;
- margin-top: 4px;
}
-/* ---------- Char counter ---------- */
-.beep-char-counter {
- font-size: 13px;
- color: var(--beep-text-secondary);
- font-variant-numeric: tabular-nums;
+.beep-compose-tools {
+ display: flex;
+ gap: 4px;
}
-.beep-counter-warn { color: #FFD400; }
-.beep-counter-bad { color: #F4212E; font-weight: 700; }
+.beep-compose-tool {
+ background: transparent;
+ border: 0;
+ color: var(--beep-accent);
+ cursor: pointer;
+ width: 36px;
+ height: 36px;
+ border-radius: 9999px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: background-color 0.15s ease;
+}
-/* ---------- Buttons ---------- */
+.beep-compose-tool:hover {
+ background: rgba(29, 155, 240, 0.15);
+}
+
+/* Buttons */
.beep-button {
- display: inline-block;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
background: var(--beep-accent);
color: #fff;
border: 0;
border-radius: 9999px;
- padding: 8px 18px;
+ padding: 8px 20px;
font-weight: 700;
font-size: 15px;
cursor: pointer;
- text-decoration: none;
font-family: inherit;
- transition: background-color 0.15s ease, opacity 0.15s ease;
+ transition: background-color 0.15s ease, transform 0.1s ease;
}
-.beep-button:hover { background: var(--beep-accent-hover); color: #fff; }
+.beep-button:hover { background: var(--beep-accent-hover); color: #fff; }
+.beep-button:active { transform: scale(0.96); }
.beep-button:disabled { opacity: 0.5; cursor: default; }
-.beep-button:disabled:hover { background: var(--beep-accent); }
-.beep-button-secondary {
+/* Follow button */
+.beep-follow-btn {
+ background: var(--beep-text);
+ color: var(--beep-bg);
+ border: 0;
+ border-radius: 9999px;
+ padding: 6px 16px;
+ font-weight: 700;
+ font-size: 14px;
+ cursor: pointer;
+ font-family: inherit;
+ transition: opacity 0.15s ease;
+ white-space: nowrap;
+}
+
+.beep-follow-btn:hover { opacity: 0.85; }
+
+.beep-following-btn {
background: transparent;
- color: var(--beep-accent);
- border: 1px solid var(--beep-accent);
- margin-left: 8px;
-}
-.beep-button-secondary:hover {
- background: rgba(29, 155, 240, 0.1);
- color: var(--beep-accent);
+ color: var(--beep-text);
+ border: 1px solid var(--beep-border);
+ border-radius: 9999px;
+ padding: 6px 16px;
+ font-weight: 700;
+ font-size: 14px;
+ cursor: pointer;
+ font-family: inherit;
+ transition: border-color 0.15s ease, color 0.15s ease, background-color 0.15s ease;
}
-/* ---------- Post ---------- */
-.beep-list {
- background: var(--beep-bg);
+.beep-following-btn:hover {
+ border-color: #F4212E;
+ color: #F4212E;
+ background: rgba(244, 33, 46, 0.1);
}
+/* Char counter */
+.beep-char-counter { font-size: 13px; color: var(--beep-muted); font-variant-numeric: tabular-nums; }
+.beep-counter-warn { color: #FFD400; }
+.beep-counter-bad { color: #F4212E; font-weight: 700; }
+
+/* Avatars */
+.beep-feed .beep-avatar {
+ width: 48px !important;
+ height: 48px !important;
+ min-width: 48px !important;
+ max-width: 48px !important;
+ border-radius: 50% !important;
+ flex-shrink: 0;
+ background: var(--beep-border);
+ object-fit: cover !important;
+ aspect-ratio: 1 / 1 !important;
+ display: block !important;
+ border: 0 !important;
+ transition: filter 0.15s ease;
+}
+
+.beep-feed .beep-avatar:hover { filter: brightness(0.9); }
+
+.beep-feed .beep-avatar-sm {
+ width: 40px !important;
+ height: 40px !important;
+ min-width: 40px !important;
+ max-width: 40px !important;
+}
+
+/* Post list */
+.beep-list { background: var(--beep-bg); }
+
.beep-empty {
- padding: 40px 20px;
+ padding: 60px 20px;
text-align: center;
- color: var(--beep-text-secondary);
+ color: var(--beep-muted);
}
+/* Individual post */
.beep-post {
display: flex;
gap: 12px;
- padding: 12px 16px;
+ padding: 14px 20px;
border-bottom: 1px solid var(--beep-border);
+ background: var(--beep-bg);
transition: background-color 0.15s ease;
+ cursor: pointer;
}
-.beep-post:hover { background: var(--beep-hover); }
+.beep-post:hover { background: var(--beep-card-hover); }
.beep-post:last-child { border-bottom: 0; }
-.beep-post-body {
- flex: 1;
- min-width: 0;
-}
+.beep-post-body { flex: 1; min-width: 0; }
-/* ---------- Meta line ---------- */
+/* Meta line */
.beep-meta {
display: flex;
align-items: center;
@@ -232,84 +294,64 @@
.beep-name {
font-weight: 700;
color: var(--beep-text);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
+.beep-name:hover { text-decoration: underline; cursor: pointer; }
+
.beep-handle,
.beep-dot,
-.beep-time {
- color: var(--beep-text-secondary);
- font-weight: 400;
-}
+.beep-time { color: var(--beep-muted); font-weight: 400; white-space: nowrap; }
.beep-time { text-decoration: none; }
+.beep-time:hover { text-decoration: underline; cursor: pointer; }
.beep-spacer { flex: 1; }
-.beep-menu-trigger {
- background: transparent;
- border: 0;
- color: var(--beep-text-secondary);
- cursor: pointer;
- font-size: 18px;
- line-height: 1;
- width: 24px;
- height: 24px;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 0;
- transition: background-color 0.15s ease, color 0.15s ease;
+/* Verified badge */
+.beep-verified {
+ width: 18px;
+ height: 18px;
+ fill: var(--beep-accent);
+ flex-shrink: 0;
+ margin-left: 2px;
+ vertical-align: text-bottom;
}
-.beep-menu-trigger:hover {
- background: rgba(244, 33, 46, 0.1);
- color: #F4212E;
-}
-
-/* ---------- Text ---------- */
+/* Post text */
.beep-text {
font-size: 15px;
- line-height: 1.4;
+ line-height: 1.5;
color: var(--beep-text);
word-wrap: break-word;
overflow-wrap: anywhere;
- margin: 2px 0 12px;
+ margin: 0;
+ white-space: pre-wrap;
}
-.beep-tag,
-.beep-mention,
-.beep-link {
- color: var(--beep-accent);
- text-decoration: none;
-}
+.beep-tag, .beep-mention { color: var(--beep-text); text-decoration: none; cursor: pointer; }
+.beep-tag:hover, .beep-mention:hover { text-decoration: underline; }
-.beep-tag:hover,
-.beep-mention:hover,
-.beep-link:hover {
- text-decoration: underline;
-}
+.beep-link { color: var(--beep-accent); text-decoration: none; }
+.beep-link:hover { text-decoration: underline; }
-.beep-mention-stale {
- color: var(--beep-accent);
- opacity: 0.85;
-}
-
-/* ---------- Action row ---------- */
+/* Action bar */
.beep-actions {
display: flex;
justify-content: space-between;
max-width: 425px;
- margin-top: 4px;
+ margin-top: 12px;
}
.beep-action {
display: flex;
align-items: center;
- gap: 6px;
+ gap: 4px;
background: transparent;
border: 0;
- color: var(--beep-text-secondary);
+ color: var(--beep-muted);
font-size: 13px;
font-family: inherit;
cursor: pointer;
@@ -319,144 +361,522 @@
transition: color 0.15s ease, background-color 0.15s ease;
}
-.beep-action svg {
+.beep-action svg,
+.beep-action .beep-icon-svg {
width: 18px;
height: 18px;
fill: currentColor;
display: block;
+ flex-shrink: 0;
}
-.beep-action .beep-count {
+.beep-count {
font-variant-numeric: tabular-nums;
+ min-width: 20px;
}
-.beep-action-reply:hover { color: var(--beep-accent); background: rgba(29,155,240,0.10); }
-.beep-action-like:hover { color: var(--beep-like); background: rgba(249, 24,128,0.10); }
-.beep-action-share:hover { color: var(--beep-accent); background: rgba(29,155,240,0.10); }
+/* Reply - blue */
+.beep-action-reply:hover {
+ color: var(--beep-accent);
+ background: rgba(29, 155, 240, 0.1);
+}
-/* Like state */
-.beep-action-like .beep-icon-filled { display: none; }
-.beep-action-like .beep-icon-outline { display: inline-flex; }
+/* Retweet - green */
+.beep-action-retweet:hover {
+ color: var(--beep-repost);
+ background: rgba(0, 186, 124, 0.1);
+}
-.beep-action-like.is-liked {
+.beep-action.is-reposted { color: var(--beep-repost); }
+
+/* Like - pink */
+.beep-action-like:hover {
color: var(--beep-like);
+ background: rgba(249, 24, 128, 0.1);
}
-.beep-action-like.is-liked .beep-icon-outline { display: none; }
-.beep-action-like.is-liked .beep-icon-filled { display: inline-flex; }
-/* Heart "pop" animation when newly liked */
+.beep-action.is-liked { color: var(--beep-like); }
+
+/* Bookmark - blue */
+.beep-action-bookmark:hover {
+ color: var(--beep-accent);
+ background: rgba(29, 155, 240, 0.1);
+}
+
+.beep-action.is-bookmarked { color: var(--beep-accent); }
+
+/* Share - blue */
+.beep-action-share:hover {
+ color: var(--beep-accent);
+ background: rgba(29, 155, 240, 0.1);
+}
+
+/* Heart pop animation */
.beep-action-like.beep-just-liked .beep-icon-filled {
animation: beep-heart-pop 0.55s ease;
}
@keyframes beep-heart-pop {
- 0% { transform: scale(0.5); }
- 35% { transform: scale(1.35); }
- 60% { transform: scale(0.85); }
+ 0% { transform: scale(0.85); }
+ 40% { transform: scale(1.35); }
+ 70% { transform: scale(0.9); }
100% { transform: scale(1); }
}
-/* ---------- Reply form ---------- */
-.beep-reply-form {
- margin-top: 8px;
- padding: 10px 0 4px;
- border-top: 1px solid var(--beep-border);
+/* Retweet spin animation */
+.beep-action-retweet.beep-just-retweeted svg {
+ animation: beep-retweet-spin 0.4s ease;
}
-.beep-reply-form .beep-input {
- font-size: 16px;
+@keyframes beep-retweet-spin {
+ 0% { transform: rotate(0deg) scale(1); }
+ 50% { transform: rotate(180deg) scale(1.2); }
+ 100% { transform: rotate(360deg) scale(1); }
}
-.beep-reply-form[hidden] { display: none; }
+/* Media */
+.beep-media-attachments {
+ margin-top: 12px;
+ border-radius: 16px;
+ overflow: hidden;
+ border: 1px solid var(--beep-border);
+}
-.beep-pending {
- padding: 12px;
- background: var(--beep-hover);
- color: var(--beep-text-secondary);
- border-radius: 8px;
+.beep-media-attachments img {
+ width: 100%;
+ height: auto;
+ display: block;
+ max-height: 400px;
+ object-fit: cover;
+}
+
+/* Image grid */
+.beep-media-grid {
+ display: grid;
+ gap: 2px;
+ border-radius: 16px;
+ overflow: hidden;
+ border: 1px solid var(--beep-border);
+}
+
+.beep-media-grid-2 { grid-template-columns: 1fr 1fr; }
+.beep-media-grid-3 .beep-media-grid-item:first-child { grid-column: span 2; }
+.beep-media-grid-4 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
+
+.beep-media-grid-item {
+ overflow: hidden;
+ aspect-ratio: 16 / 9;
+}
+
+.beep-media-grid-item img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ max-height: none;
+}
+
+/* Polls */
+.beep-poll-container {
+ margin-top: 12px;
+ border: 1px solid var(--beep-border);
+ border-radius: 16px;
+ padding: 16px;
+ background: transparent;
+}
+
+.beep-poll-question {
+ font-size: 15px;
+ font-weight: 700;
+ color: var(--beep-text);
+ margin-bottom: 12px;
+}
+
+.beep-poll-options {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+.beep-poll-option {
+ border: 1px solid var(--beep-border);
+ border-radius: 9999px;
+ padding: 10px 16px;
+ cursor: pointer;
font-size: 14px;
- text-align: center;
+ font-weight: 700;
+ color: var(--beep-text);
+ background: transparent;
+ transition: background-color 0.15s ease, border-color 0.15s ease;
+ position: relative;
+ overflow: hidden;
}
-/* ---------- Replies ---------- */
+.beep-poll-option:hover {
+ background: var(--beep-card-hover);
+ border-color: var(--beep-muted);
+}
+
+.beep-poll-option.is-voted { border-color: var(--beep-accent); }
+
+.beep-poll-result {
+ border: 1px solid var(--beep-border);
+ border-radius: 9999px;
+ padding: 10px 16px;
+ font-size: 14px;
+ font-weight: 700;
+ color: var(--beep-text);
+ position: relative;
+ overflow: hidden;
+}
+
+.beep-poll-result-bar {
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ background: var(--beep-accent);
+ opacity: 0.3;
+ max-width: 100%;
+}
+
+.beep-poll-result.is-voted { border-color: var(--beep-accent); }
+.beep-poll-result-text { position: relative; z-index: 1; }
+.beep-poll-end { font-size: 13px; color: var(--beep-muted); margin-top: 8px; font-weight: 400; }
+
+/* Quotes */
+.beep-quoted-container {
+ margin-top: 12px;
+ border: 1px solid var(--beep-border);
+ border-radius: 16px;
+ padding: 12px 16px;
+ background: transparent;
+}
+
+.beep-quoted-post { text-decoration: none; color: inherit; }
+.beep-quoted-post:hover { text-decoration: none; }
+
+.beep-quoted-meta { font-size: 13px; color: var(--beep-muted); margin-bottom: 4px; }
+.beep-quoted-meta .beep-name { font-weight: 700; }
+
+.beep-quoted-text {
+ font-size: 14px;
+ color: var(--beep-text);
+ line-height: 1.4;
+ margin: 0;
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+}
+
+/* Voice note */
+.beep-voice-note {
+ margin-top: 12px;
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ background: var(--beep-card-hover);
+ border-radius: 9999px;
+ padding: 10px 16px;
+ max-width: 400px;
+}
+
+.beep-voice-play {
+ background: var(--beep-accent);
+ border: 0;
+ border-radius: 50%;
+ width: 32px;
+ height: 32px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ flex-shrink: 0;
+ padding: 0;
+}
+
+.beep-voice-play svg { width: 14px; height: 14px; fill: #fff; }
+
+.beep-voice-waveform {
+ flex: 1;
+ height: 24px;
+ display: flex;
+ align-items: center;
+ gap: 2px;
+}
+
+.beep-voice-bar {
+ width: 3px;
+ height: 100%;
+ background: var(--beep-accent);
+ border-radius: 9999px;
+ opacity: 0.6;
+}
+
+.beep-voice-duration { font-size: 13px; color: var(--beep-muted); font-variant-numeric: tabular-nums; }
+
+/* Replies */
.beep-replies {
margin-top: 8px;
- padding-left: 24px;
+ padding-left: 0;
border-left: 2px solid var(--beep-border);
+ margin-left: 24px;
}
.beep-reply {
display: flex;
gap: 10px;
- padding: 10px 0;
+ padding: 10px 16px;
border-bottom: 1px solid var(--beep-border);
+ background: var(--beep-bg);
+ transition: background-color 0.15s ease;
}
.beep-reply:last-child { border-bottom: 0; }
+.beep-reply-body { flex: 1; min-width: 0; }
+.beep-reply .beep-text { font-size: 14px; margin-bottom: 0; }
+.beep-reply .beep-meta { font-size: 13px; margin-bottom: 0; }
+.beep-reply .beep-avatar { width: 36px !important; height: 36px !important; min-width: 36px !important; max-width: 36px !important; }
-.beep-reply-body {
- flex: 1;
- min-width: 0;
+/* Reply form */
+.beep-reply-form {
+ margin-top: 8px;
+ padding: 12px 16px;
+ border-top: 1px solid var(--beep-border);
+ border-bottom: 1px solid var(--beep-border);
+ display: flex;
+ gap: 10px;
+ align-items: flex-start;
+ background: var(--beep-bg);
}
-.beep-reply .beep-text {
- font-size: 14px;
- margin-bottom: 0;
+.beep-reply-form[hidden] { display: none; }
+.beep-reply-form-body { flex: 1; min-width: 0; }
+
+.beep-feed .beep-reply-input {
+ width: 100% !important;
+ border: 0 !important;
+ outline: 0 !important;
+ resize: none !important;
+ background: transparent !important;
+ font-family: inherit !important;
+ font-size: 15px !important;
+ color: var(--beep-text) !important;
+ padding: 6px 0 !important;
+ min-height: 36px;
+ box-shadow: none !important;
+ caret-color: var(--beep-accent);
}
-/* ---------- New-post entry animation ---------- */
-.beep-new {
- animation: beep-slide-in 0.4s ease;
+.beep-feed .beep-reply-input::placeholder { color: var(--beep-muted) !important; }
+
+.beep-reply-footer {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ margin-top: 8px;
}
+/* Animations */
+.beep-new { animation: beep-slide-in 0.3s ease; }
+
@keyframes beep-slide-in {
- from { opacity: 0; transform: translateY(-6px); }
+ from { opacity: 0; transform: translateY(-8px); }
to { opacity: 1; transform: translateY(0); }
}
-/* ---------- Mobile ---------- */
-@media (max-width: 640px) {
- .beep-feed {
- margin: 0 auto;
- border-radius: 0;
- border-left: 0;
- border-right: 0;
- }
- .beep-actions { max-width: none; }
+/* Post badge */
+.beep-post-badge {
+ width: 18px;
+ height: 18px;
+ flex-shrink: 0;
+ opacity: 0.5;
+ margin-left: 2px;
}
-/* ---------- Tip popover (for "Copied" etc) ---------- */
+.beep-post-badge:hover { opacity: 0.8; cursor: pointer; }
+
+/* Loading */
+.beep-loading { opacity: 0.5; pointer-events: none; }
+
+/* Mobile */
+@media (max-width: 640px) {
+ .beep-feed { margin: 0; border-left: 0; border-right: 0; }
+ .beep-post { padding: 12px 16px; }
+ .beep-actions { max-width: none; }
+ .beep-compose { padding: 12px 16px; }
+ .beep-feed-header { padding: 12px 16px; }
+}
+
+/* Delete */
+.beep-delete-row { display: flex; justify-content: flex-end; margin-top: 6px; }
+
+.beep-delete-link {
+ background: transparent;
+ border: 0;
+ color: var(--beep-muted);
+ font-family: inherit;
+ font-size: 13px;
+ cursor: pointer;
+ padding: 4px 8px;
+ border-radius: 4px;
+ transition: color 0.15s ease, background-color 0.15s ease;
+}
+
+.beep-delete-link:hover { color: #F4212E; background: rgba(244, 33, 46, 0.1); }
+
+/* Notice */
+.beep-notice { padding: 14px 20px; border-bottom: 1px solid var(--beep-border); font-size: 14px; }
+.beep-notice p { margin: 0; color: var(--beep-muted); }
+.beep-notice-banned { color: #F4212E; font-style: italic; }
+
+/* Header post button */
+.beep-post-btn-header {
+ background: var(--beep-accent);
+ color: #fff;
+ border: 0;
+ border-radius: 9999px;
+ padding: 8px 20px;
+ font-weight: 700;
+ font-size: 15px;
+ cursor: pointer;
+ font-family: inherit;
+ transition: background-color 0.15s ease, transform 0.1s ease;
+}
+
+.beep-post-btn-header:hover { background: var(--beep-accent-hover); }
+.beep-post-btn-header:active { transform: scale(0.96); }
+
+/* Back link */
+.beep-back-link {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 12px 20px;
+ border-bottom: 1px solid var(--beep-border);
+ background: var(--beep-bg);
+ color: var(--beep-text);
+ text-decoration: none;
+ font-weight: 700;
+ font-size: 19px;
+ transition: background-color 0.15s ease;
+}
+
+.beep-back-link:hover { background: var(--beep-card-hover); color: var(--beep-text); text-decoration: none; }
+.beep-back-link svg { width: 20px; height: 20px; fill: currentColor; }
+
+/* Thread modal */
+.beep-thread-modal {
+ position: fixed;
+ inset: 0;
+ z-index: 1000;
+ display: flex;
+ align-items: flex-start;
+ justify-content: center;
+ background: rgba(0, 0, 0, 0.4);
+ backdrop-filter: blur(4px);
+}
+
+.beep-thread-modal[hidden] { display: none; }
+
+.beep-thread-content {
+ background: var(--beep-card-bg);
+ width: 100%;
+ max-width: 600px;
+ max-height: 90vh;
+ overflow-y: auto;
+ border-left: 1px solid var(--beep-border);
+ border-right: 1px solid var(--beep-border);
+}
+
+.beep-thread-header {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ padding: 12px 20px;
+ border-bottom: 1px solid var(--beep-border);
+ position: sticky;
+ top: 0;
+ background: var(--beep-card-bg);
+ z-index: 1;
+}
+
+.beep-thread-close {
+ background: transparent;
+ border: 0;
+ color: var(--beep-text);
+ cursor: pointer;
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0;
+ transition: background-color 0.15s ease;
+}
+
+.beep-thread-close:hover { background: var(--beep-card-hover); }
+.beep-thread-close svg { width: 20px; height: 20px; fill: currentColor; }
+.beep-thread-title { font-size: 18px; font-weight: 700; color: var(--beep-text); }
+
+/* Tooltip */
.beep-tip {
position: absolute;
margin-left: 8px;
- padding: 2px 8px;
+ padding: 4px 10px;
background: var(--beep-text);
- color: #fff;
+ color: var(--beep-bg);
border-radius: 4px;
font-size: 12px;
white-space: nowrap;
+ pointer-events: none;
+ z-index: 100;
animation: beep-tip-fade 1.5s ease forwards;
}
@keyframes beep-tip-fade {
- 0% { opacity: 0; }
- 20% { opacity: 1; }
+ 0% { opacity: 0; transform: translateY(-4px); }
+ 20% { opacity: 1; transform: translateY(0); }
80% { opacity: 1; }
100% { opacity: 0; }
}
-/* ============================================================
- v1.4 — sort tabs, nested replies, Twitter polish
- ============================================================ */
-
-/* ---------- Sort tabs (Latest / Top) ---------- */
-.beep-feed .beep-tabs {
- display: flex;
- border-bottom: 1px solid var(--beep-border);
- background: var(--beep-bg);
+/* GIF */
+.beep-gif-embed {
+ margin-top: 12px;
+ border-radius: 12px;
+ overflow: hidden;
+ border: 1px solid var(--beep-border);
}
-.beep-feed .beep-tab {
+.beep-gif-embed img {
+ width: 100%;
+ height: auto;
+ max-height: 400px;
+ object-fit: cover;
+ display: block;
+ margin: 0;
+ border-radius: 12px;
+}
+
+/* Profile header */
+.beep-profile-header { padding: 16px 20px; border-bottom: 1px solid var(--beep-border); }
+.beep-profile-name { font-size: 20px; font-weight: 800; color: var(--beep-text); margin-bottom: 2px; }
+.beep-profile-meta { font-size: 14px; color: var(--beep-muted); }
+.beep-profile-stats { display: flex; gap: 20px; margin-top: 12px; }
+.beep-profile-stat { color: var(--beep-muted); font-size: 14px; cursor: pointer; }
+.beep-profile-stat:hover { text-decoration: underline; }
+.beep-profile-stat strong { color: var(--beep-text); font-weight: 700; }
+
+/* Tabs */
+.beep-tabs {
+ display: flex;
+ border-bottom: 1px solid var(--beep-border);
+ background: var(--beep-card-bg);
+}
+
+.beep-tab {
flex: 1;
background: transparent;
border: 0;
@@ -464,22 +884,15 @@
font-family: inherit;
font-size: 15px;
font-weight: 700;
- color: var(--beep-text-secondary);
+ color: var(--beep-muted);
cursor: pointer;
position: relative;
transition: background-color 0.15s ease, color 0.15s ease;
}
-.beep-feed .beep-tab:hover {
- background: var(--beep-hover);
- color: var(--beep-text);
-}
-
-.beep-feed .beep-tab.is-active {
- color: var(--beep-text);
-}
-
-.beep-feed .beep-tab.is-active::after {
+.beep-tab:hover { background: var(--beep-card-hover); color: var(--beep-text); }
+.beep-tab.is-active { color: var(--beep-text); }
+.beep-tab.is-active::after {
content: '';
position: absolute;
left: 50%;
@@ -491,1077 +904,146 @@
background: var(--beep-accent);
}
-/* ---------- Loading state on feed list ---------- */
-.beep-feed .beep-list.beep-loading {
- opacity: 0.5;
- pointer-events: none;
- transition: opacity 0.15s ease;
-}
-
-/* ---------- Action row variant for replies (smaller, no share) ---------- */
-.beep-feed .beep-actions-reply {
- max-width: 240px;
- gap: 24px;
- margin-top: 2px;
-}
-
-/* ---------- Nested replies: visual indent, capped at depth 2 ---------- */
-.beep-feed .beep-replies-nested {
- margin-top: 8px;
- margin-left: 12px;
- padding-left: 14px;
- border-left: 2px solid var(--beep-border);
-}
-
-/* Anything deeper than depth 2 stops indenting more */
-.beep-feed .beep-depth-2 .beep-replies-nested,
-.beep-feed .beep-depth-3 .beep-replies-nested,
-.beep-feed .beep-depth-4 .beep-replies-nested {
- margin-left: 0;
- padding-left: 8px;
-}
-
-/* ---------- Focus rings on text inputs ---------- */
+/* Focus */
.beep-feed .beep-input:focus,
-.beep-feed .beep-input:focus-visible {
+.beep-feed .beep-input:focus-visible,
+.beep-feed .beep-reply-input:focus,
+.beep-feed .beep-reply-input:focus-visible {
outline: 0 !important;
box-shadow: none !important;
}
-.beep-feed .beep-compose:focus-within,
-.beep-feed .beep-reply-form:focus-within {
- background: linear-gradient(to bottom, transparent, rgba(29, 155, 240, 0.04));
- transition: background-color 0.15s ease;
+.beep-feed .beep-compose:focus-within { background: rgba(29, 155, 240, 0.03); }
+
+/* Hidden */
+[hidden] { display: none !important; }
+
+
+/* Magic Login Form */
+.beep-magic-login {
+ padding: 24px;
+ display: flex;
+ justify-content: center;
}
-/* ---------- Buttons: refine to match Twitter's "Post" button ---------- */
-.beep-feed .beep-post-button,
-.beep-feed .beep-reply-submit {
- font-size: 14px;
- padding: 7px 18px;
- font-weight: 700;
- letter-spacing: -0.1px;
+.beep-magic-login-card {
+ background: #192734;
+ border-radius: 16px;
+ padding: 32px;
+ width: 100%;
+ max-width: 400px;
+ text-align: center;
}
-/* ---------- Tighter post hover ---------- */
-.beep-feed .beep-post {
- transition: background-color 0.15s ease;
+.beep-magic-login-header {
+ margin-bottom: 24px;
}
-/* ---------- Refine action icons size ---------- */
-.beep-feed .beep-action {
- padding: 4px 6px;
- font-size: 13px;
-}
-.beep-feed .beep-action svg {
- width: 17px;
- height: 17px;
+.beep-magic-login-header svg {
+ margin-bottom: 16px;
}
-/* ---------- Reply rows: tighten spacing ---------- */
-.beep-feed .beep-reply {
- padding: 10px 0 8px;
+.beep-magic-login-header h3 {
+ color: #E7E9EA;
+ font-size: 20px;
+ font-weight: 700;
+ margin: 0 0 8px 0;
}
-/* Make sure reply meta + actions feel cohesive */
-.beep-feed .beep-reply .beep-text {
- margin-bottom: 4px;
+.beep-magic-login-header p {
+ color: #71767B;
+ font-size: 14px;
+ margin: 0;
}
-/* ---------- Per-post Beep badge (top-right of each post/reply) ---------- */
-.beep-feed .beep-post-badge {
- width: 20px;
- height: 20px;
- flex-shrink: 0;
- display: block;
- opacity: 0.75;
- margin-left: 4px;
- transition: opacity 0.15s ease;
-}
-.beep-feed .beep-post-badge:hover {
- opacity: 1;
-}
-.beep-feed .beep-post-badge-sm {
- width: 16px;
- height: 16px;
-}
-
-/* ---------- Delete row (bottom of post/reply, admin only) ---------- */
-.beep-feed .beep-delete-row {
- display: flex;
- justify-content: flex-end;
- margin-top: 6px;
-}
-
-.beep-feed .beep-delete-link {
- background: transparent;
- border: 0;
- color: var(--beep-text-secondary);
- font-family: inherit;
- font-size: 22px;
- line-height: 1;
- font-weight: 400;
- cursor: pointer;
- width: 28px;
- height: 28px;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 0;
- transition: color 0.15s ease, background-color 0.15s ease, transform 0.1s ease;
-}
-
-.beep-feed .beep-delete-link:hover {
- color: #F4212E;
- background: rgba(244, 33, 46, 0.10);
-}
-
-.beep-feed .beep-delete-link:active {
- color: #F4212E;
- background: rgba(244, 33, 46, 0.25);
- transform: scale(0.92);
-}
-
-/* Override earlier 20/16 badge sizes with bigger 32/24 */
-.beep-feed .beep-post-badge {
- width: 32px;
- height: 32px;
-}
-.beep-feed .beep-post-badge-sm {
- width: 24px;
- height: 24px;
-}
-
-/* ============================================================
- v1.4.1 — theme-busting overrides
- Many WordPress themes style ALL
+
+
+
+
+
+ */
+ public static function inject_css_variables() {
+ $settings = self::get_settings();
+ ?>
+
+ Background colors for the feed and cards.';
+ }
+
+ public static function section_colors_text_description() {
+ echo 'Text colors throughout the feed.
';
+ }
+
+ public static function section_colors_interactive_description() {
+ echo 'Colors for interactive elements like buttons and icons.
';
+ }
+
+ public static function section_layout_description() {
+ echo 'Spacing and layout dimensions.
';
+ }
+
+ public static function section_radius_description() {
+ echo 'Border radius for rounded corners. Use 0px for sharp edges (Twitter style), 16px for rounded cards.
';
+ }
+
+ public static function section_typography_description() {
+ echo 'Font settings.
';
+ }
+
+ public static function section_branding_description() {
+ echo 'Logo and site name settings.
';
+ }
+
+ public static function section_features_description() {
+ echo 'Toggle features on or off.
';
+ }
+
+ public static function section_behavior_description() {
+ echo 'How the feed behaves.
';
+ }
+
+ public static function section_content_description() {
+ echo 'What to show/hide in the feed.
';
+ }
+
+ // === Field Renderers ===
+ public static function field_color_picker($args) {
+ $key = $args['key'];
+ $label = $args['label'];
+ $value = self::get($key);
+ ?>
+
+
+
+
+
+
+
+
+
Date: Fri, 29 May 2026 21:45:41 -0700
Subject: [PATCH 2/2] Beep v1.5.1: Elementor widget, logo/icon settings with
live preview, CSS isolation, JS fixes
---
assets/beep-logo.png | Bin 30838 -> 3013 bytes
assets/beep-wordmark.png | Bin 54740 -> 3523 bytes
assets/beep.css | 363 ++++++++++++++--------------
assets/beep.js | 16 +-
beep.php | 4 +-
includes/class-beep.php | 8 +-
includes/class-elementor-widget.php | 127 ++++++++++
includes/class-settings.php | 303 ++++++++++++++++++++++-
includes/class-shortcode.php | 6 +-
includes/helpers.php | 7 +-
10 files changed, 623 insertions(+), 211 deletions(-)
create mode 100644 includes/class-elementor-widget.php
diff --git a/assets/beep-logo.png b/assets/beep-logo.png
index 882063d1a770186915bc9ff9af659289bd9f944f..2418e8d9bbe34902b418ec741b5bcd83a000286c 100755
GIT binary patch
literal 3013
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
diff --git a/assets/beep-wordmark.png b/assets/beep-wordmark.png
index 5bee10e94b24ca6ad043574b2539a9a5ac6e34d6..5459809a07f0fd1d395010141a0b10919336851a 100644
GIT binary patch
literal 3523
zcmeHIX;9Nw5Puw!0)kGl6Hx&jDdZO
zIL^vqodp2E3LhL00f3QqnOB>^mXaV7J}fpK4UPx{Akzte+|vNOhfTR}07!KQKoJ9g
z_iq3oPhD;L+82H>`ymt;085zWcQ?~uVSXz35E%~X@-LGMr
z#>pBuyCXhe*Z%Y&r8vHze1%=7W`v1GR|+N-it4T5jqyzidP6-jqbrmfxTcDTv|?}~
ze?slPbR;0CAY|M16KgG8Z$`wF$CbVQ;^KC6fvZ>bm8Q58CnvnCn(NSYum{5$ngRuk`XqNrFn&L2)R{Lx-dwJ4h
z3pvbO8C|c=FBdUh@>NAyG>ok{o^pX&0jbJw45X<-%&aE~+L|yff!MrwE)}o#bPch3ofBMJ%y|@r=kppW6+twsYN&Zp%OC)v9WFS&&3i*DJ`z
z$`{;mX|z(UJyU;N_Dk$o2VFuR=kHIP9-z&iLKBmdMA6nh0~4OJJa(cgF{niM965Ak
zdFreEaqMC7F&&p@3Ip%aH?!Os{$(ccVQy>(-z`?d(;w{3^+&*qz}VCqR@Q9nGXkIt
zpwxaL{!729JTPP|oNC^P3ZTxVn8jxhE1Pjb_1+$yR@njnlz
zLe?e#$h+Vevr~^{tejVBVhsSJv>sZLq0j&8H(#5Ow&~w&Amv&ij*ge@_&(R&&
z_JTEYJ68WjYpW}CHnG`fQ;LHGU8NIrdqVQJw4B7Ff9c}VsEKj+$19aMk_aulFD;rz
zVvD;A-RA$MpMhS>yHr>#-pQUlSflJUUszH^!OIDYnPrVpd>`CU9s{7;Dv#y3QcG457#n5}4j4I>KIx$@%6fQe2^VPu
z+#9@!tA77}k}j=&5Z`GzvGgwX?alseGa^4*o-{X$AYo}|hEUUrF#c1>(!ncz3$rEl
zS^l+he#fF)Wv0Fpzf>==YxQcF7c$3*G}jnp@^SJl?2s5oSzrxi=ZM$XrfI$J(nw%`N91FFA@$^QqT=?6{#
literal 54740
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