diff --git a/components/Dashboard/FeaturesLayoutEditor/features-layout-editor.css b/components/Dashboard/FeaturesLayoutEditor/features-layout-editor.css
index 4624521..8cd318c 100644
--- a/components/Dashboard/FeaturesLayoutEditor/features-layout-editor.css
+++ b/components/Dashboard/FeaturesLayoutEditor/features-layout-editor.css
@@ -519,18 +519,27 @@
/* ---- Image toggle ---- */
.fle-image-toggle {
- display: inline-flex;
- align-items: center;
- gap: 4px;
- font-size: 0.64rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.04em;
- opacity: 0.5;
- cursor: pointer;
+ display: inline-flex !important;
+ flex-direction: row !important;
+ align-items: center !important;
+ align-self: center !important;
+ gap: 4px !important;
+ font-size: 0.68rem !important;
+ font-weight: 600 !important;
+ line-height: 1 !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.06em !important;
+ color: var(--theme-text, #fff) !important;
+ opacity: 0.4 !important;
+ cursor: pointer !important;
+ margin: 0 !important;
+ padding: 0 !important;
}
.fle-image-toggle input {
cursor: pointer;
+ vertical-align: middle;
+ margin: 0 !important;
+ flex-shrink: 0;
}
/* ---- Photo Spotlight ---- */
diff --git a/components/Dashboard/OpinionLayoutEditor/index.tsx b/components/Dashboard/OpinionLayoutEditor/index.tsx
index 2d903dc..1a31a34 100644
--- a/components/Dashboard/OpinionLayoutEditor/index.tsx
+++ b/components/Dashboard/OpinionLayoutEditor/index.tsx
@@ -50,8 +50,11 @@ type UserData = {
type OpinionLayout = {
column1: (number | null)[];
+ column1Images: boolean[];
column2: (number | null)[];
+ column2Images: boolean[];
column3: (number | null)[];
+ column3Images: boolean[];
editorsChoice: (number | null)[];
editorsChoiceLabel: string;
spotlight: SpotlightEntry[];
@@ -69,8 +72,11 @@ const pointerThenCenter: CollisionDetection = (args) => {
const EMPTY_LAYOUT: OpinionLayout = {
column1: [null, null, null, null, null],
+ column1Images: [false, false, false, false, false],
column2: [null, null, null, null],
+ column2Images: [false, false, false, false],
column3: [null, null, null, null],
+ column3Images: [false, false, false, false],
editorsChoice: [null, null, null],
editorsChoiceLabel: "Opinion\u2019s Choice",
spotlight: [],
@@ -179,7 +185,7 @@ function SlotPreview({ article, showImage }: { article: ArticleData; showImage?:
// ---------------------------------------------------------------------------
function DropSlot({
- slotId, label, article, showImage, onClear, isImageSlot,
+ slotId, label, article, showImage, onClear, isImageSlot, imageToggle,
}: {
slotId: string;
label: string;
@@ -187,6 +193,7 @@ function DropSlot({
showImage?: boolean;
onClear: () => void;
isImageSlot?: boolean;
+ imageToggle?: React.ReactNode;
}) {
const { isOver, setNodeRef } = useDroppable({
id: `drop-${slotId}`,
@@ -200,9 +207,12 @@ function DropSlot({
>
{label}
- {article && (
-
- )}
+
+ {imageToggle}
+ {article && (
+
+ )}
+
{article ? (
@@ -313,13 +323,8 @@ function ArticlePool({
return (
onSearch(e.target.value)}
- style={{
- display: 'block',
- width: '100%',
- boxSizing: 'border-box',
- padding: '6px 10px',
- fontSize: '13px',
- lineHeight: '1.4',
- border: '1px solid #ccc',
- borderRadius: '6px',
- outline: 'none',
- background: '#f5f5f5',
- }}
+ className="ole-pool-search"
/>
{filtered.length === 0 && (
No articles found
)}
- {filtered.slice(0, 10).map((article) => (
+ {filtered.slice(0, 20).map((article) => (
))}
@@ -435,10 +429,22 @@ export function OpinionLayoutEditor() {
if (layoutData) {
const savedLayout = layoutData.layout as OpinionLayout | undefined;
if (savedLayout && typeof savedLayout === 'object') {
+ const c1 = padArray(savedLayout.column1, 5);
+ const c2 = padArray(savedLayout.column2, 4);
+ const c3 = padArray(savedLayout.column3, 4);
setLayout({
- column1: padArray(savedLayout.column1, 5),
- column2: padArray(savedLayout.column2, 4),
- column3: padArray(savedLayout.column3, 4),
+ column1: c1,
+ column1Images: savedLayout.column1Images
+ ? padBoolArray(savedLayout.column1Images, c1.length)
+ : padBoolArray([true], c1.length), // col1[0] previously always had image
+ column2: c2,
+ column2Images: savedLayout.column2Images
+ ? padBoolArray(savedLayout.column2Images, c2.length)
+ : padBoolArray([false, false, true], c2.length), // col2[2] previously always had image
+ column3: c3,
+ column3Images: savedLayout.column3Images
+ ? padBoolArray(savedLayout.column3Images, c3.length)
+ : padBoolArray([false, false, false, true], c3.length), // col3[3] previously always had image
editorsChoice: padArray(savedLayout.editorsChoice, 3),
editorsChoiceLabel: savedLayout.editorsChoiceLabel || "Opinion\u2019s Choice",
spotlight: (savedLayout as OpinionLayout).spotlight || [],
@@ -488,6 +494,27 @@ export function OpinionLayoutEditor() {
setSlot(parsed.column, parsed.index, null);
}, [setSlot]);
+ const toggleColumnImage = useCallback((column: 'column1' | 'column2' | 'column3', index: number) => {
+ const imagesKey = (column + 'Images') as 'column1Images' | 'column2Images' | 'column3Images';
+ setLayout((prev) => {
+ const imgs = [...prev[imagesKey]];
+ while (imgs.length <= index) imgs.push(false);
+ imgs[index] = !imgs[index];
+ return { ...prev, [imagesKey]: imgs };
+ });
+ markDirty();
+ }, [markDirty]);
+
+ const addSlot = useCallback((column: 'column1' | 'column2' | 'column3') => {
+ const imagesKey = (column + 'Images') as 'column1Images' | 'column2Images' | 'column3Images';
+ setLayout((prev) => ({
+ ...prev,
+ [column]: [...prev[column], null],
+ [imagesKey]: [...prev[imagesKey], false],
+ }));
+ markDirty();
+ }, [markDirty]);
+
// ---- Spotlight ----
const addSpotlight = useCallback((userId: number) => {
setLayout((prev) => {
@@ -594,10 +621,16 @@ export function OpinionLayoutEditor() {
setError(null);
try {
// Trim trailing nulls from columns
+ const tc1 = trimTrailingNulls(layout.column1);
+ const tc2 = trimTrailingNulls(layout.column2);
+ const tc3 = trimTrailingNulls(layout.column3);
const trimmed = {
- column1: trimTrailingNulls(layout.column1),
- column2: trimTrailingNulls(layout.column2),
- column3: trimTrailingNulls(layout.column3),
+ column1: tc1,
+ column1Images: layout.column1Images.slice(0, tc1.length),
+ column2: tc2,
+ column2Images: layout.column2Images.slice(0, tc2.length),
+ column3: tc3,
+ column3Images: layout.column3Images.slice(0, tc3.length),
editorsChoice: trimTrailingNulls(layout.editorsChoice),
editorsChoiceLabel: layout.editorsChoiceLabel,
spotlight: layout.spotlight || [],
@@ -666,7 +699,7 @@ export function OpinionLayoutEditor() {
-
+
{/* Left: canvas */}
{/* 3-column layout canvas */}
@@ -676,9 +709,23 @@ export function OpinionLayoutEditor() {
Column 1
-
clearSlot('col1-0')} isImageSlot />
- clearSlot('col1-1')} />
- clearSlot('col1-2')} />
+ {layout.column1.slice(0, 3).map((_, i) => (
+ clearSlot(`col1-${i}`)}
+ imageToggle={
+
+ }
+ />
+ ))}
{/* Fixed CTA */}
@@ -687,8 +734,27 @@ export function OpinionLayoutEditor() {
- clearSlot('col1-3')} />
- clearSlot('col1-4')} />
+ {layout.column1.slice(3).map((_, ii) => {
+ const i = ii + 3;
+ return (
+ clearSlot(`col1-${i}`)}
+ imageToggle={
+
+ }
+ />
+ );
+ })}
+
{/* Column 2 */}
@@ -696,7 +762,20 @@ export function OpinionLayoutEditor() {
Column 2
-
clearSlot('col2-0')} />
+ clearSlot('col2-0')}
+ imageToggle={
+
+ }
+ />
{/* Author Spotlight Carousel — inline editor */}
@@ -763,9 +842,27 @@ export function OpinionLayoutEditor() {
-
clearSlot('col2-1')} />
- clearSlot('col2-2')} isImageSlot />
- clearSlot('col2-3')} />
+ {layout.column2.slice(1).map((_, ii) => {
+ const i = ii + 1;
+ return (
+ clearSlot(`col2-${i}`)}
+ imageToggle={
+
+ }
+ />
+ );
+ })}
+
{/* Column 3 */}
@@ -788,10 +885,24 @@ export function OpinionLayoutEditor() {
))}
- clearSlot('col3-0')} />
- clearSlot('col3-1')} />
- clearSlot('col3-2')} />
- clearSlot('col3-3')} isImageSlot />
+ {layout.column3.map((_, i) => (
+ clearSlot(`col3-${i}`)}
+ imageToggle={
+
+ }
+ />
+ ))}
+
@@ -828,3 +939,9 @@ function trimTrailingNulls(arr: (number | null)[]): (number | null)[] {
while (result.length > 0 && result[result.length - 1] === null) result.pop();
return result;
}
+
+function padBoolArray(arr: boolean[] | undefined, len: number): boolean[] {
+ const result = [...(arr || [])];
+ while (result.length < len) result.push(false);
+ return result.slice(0, len);
+}
diff --git a/components/Dashboard/OpinionLayoutEditor/opinion-layout-editor.css b/components/Dashboard/OpinionLayoutEditor/opinion-layout-editor.css
index fd1cc3a..17b9cc7 100644
--- a/components/Dashboard/OpinionLayoutEditor/opinion-layout-editor.css
+++ b/components/Dashboard/OpinionLayoutEditor/opinion-layout-editor.css
@@ -31,7 +31,7 @@
min-height: 100vh;
background: var(--theme-bg, #0a0a0a);
color: var(--theme-text, #fff);
- font-family: inherit;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.ole-root button,
.ole-root input {
@@ -100,7 +100,7 @@
cursor: default;
}
-/* ---- Body (split: canvas left, pool right) ---- */
+/* ---- Body ---- */
.ole-body {
display: grid;
grid-template-columns: 1fr 320px;
@@ -119,37 +119,10 @@
min-width: 0;
}
-/* ---- Editor's Choice Label ---- */
-.ole-ec-label-row {
- display: flex;
- align-items: center;
- gap: 12px;
- margin-bottom: 20px;
-}
-.ole-ec-label-label {
- font-size: 0.8rem;
- font-weight: 500;
- opacity: 0.6;
- white-space: nowrap;
-}
-.ole-ec-label-input {
- background: var(--theme-elevation-100, #1a1a1a);
- border: 1px solid var(--theme-elevation-200, #333);
- color: var(--theme-text, #fff);
- padding: 6px 12px;
- border-radius: 6px;
- font-size: 0.82rem;
- width: 260px;
-}
-.ole-ec-label-input:focus {
- outline: none;
- border-color: #2563eb;
-}
-
/* ---- 3-Column Canvas ---- */
.ole-canvas {
display: grid;
- grid-template-columns: 1fr 1fr 1fr;
+ grid-template-columns: 200px 1fr 240px;
gap: 16px;
}
@@ -290,65 +263,19 @@
padding: 14px;
position: relative;
}
-.ole-cta-block::before {
- content: 'FIXED';
- position: absolute;
- top: 4px;
- right: 8px;
- font-size: 0.58rem;
- font-weight: 700;
- letter-spacing: 0.1em;
- opacity: 0.25;
- text-transform: uppercase;
-}
.ole-cta-text {
- font-size: 0.78rem;
- opacity: 0.6;
+ font-size: 0.72rem;
+ opacity: 0.35;
margin: 0;
- line-height: 1.5;
+ text-align: center;
+ line-height: 1.4;
}
.ole-cta-link {
- color: #2563eb;
-}
-
-/* ---- Carousel Block (fixed, non-draggable) ---- */
-.ole-carousel-block {
- background: var(--theme-elevation-100, #1a1a1a);
- border: 1px solid var(--theme-elevation-200, #2a2a2a);
- border-radius: 8px;
- padding: 16px 14px;
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 6px;
- position: relative;
-}
-.ole-carousel-block::before {
- content: 'FIXED';
- position: absolute;
- top: 4px;
- right: 8px;
- font-size: 0.58rem;
- font-weight: 700;
- letter-spacing: 0.1em;
- opacity: 0.25;
- text-transform: uppercase;
-}
-.ole-carousel-icon {
- opacity: 0.3;
-}
-.ole-carousel-label {
- font-size: 0.74rem;
- font-weight: 600;
- opacity: 0.5;
-}
-.ole-carousel-hint {
- font-size: 0.64rem;
- opacity: 0.25;
- font-style: italic;
+ text-decoration: underline;
+ cursor: default;
}
-/* ---- Editor's Choice Section ---- */
+/* ---- Editor's Choice section ---- */
.ole-ec-section {
background: var(--theme-elevation-100, #1a1a1a);
border: 2px solid #C41E3A;
@@ -374,89 +301,164 @@
box-shadow: 0 0 0 1px #C41E3A, inset 0 0 12px rgba(196, 30, 58, 0.08);
}
-/* ---- Pool (right sidebar — direct grid child, matches le-pool) ---- */
-.ole-pool {
- border-left: 1px solid var(--theme-elevation-100, #181818);
- background: var(--theme-bg, #0a0a0a);
+/* ---- Author Spotlight section ---- */
+.ole-spotlight-section {
+ background: var(--theme-elevation-100, #1a1a1a);
+ border: 2px solid #2563eb;
+ border-radius: 8px;
+ padding: 10px;
display: flex;
flex-direction: column;
- height: calc(100vh - 53px);
- position: sticky;
- top: 53px;
-}
-@media (max-width: 1100px) {
- .ole-pool {
- border-left: none;
- border-top: 1px solid var(--theme-elevation-100, #181818);
- height: auto;
- max-height: 500px;
- position: static;
- }
-}
-.ole-pool-drop-active {
- outline: 2px dashed #3b82f6;
- outline-offset: -2px;
- background: rgba(59, 130, 246, 0.04);
+ gap: 8px;
}
-.ole-pool-header {
+.ole-spotlight-header {
display: flex;
- align-items: baseline;
+ align-items: center;
justify-content: space-between;
- padding: 14px 14px 0;
}
-.ole-pool-title {
+.ole-spotlight-title {
font-size: 0.78rem;
font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.06em;
+ color: #2563eb;
margin: 0;
- letter-spacing: -0.01em;
}
-.ole-root .ole-pool-search {
- display: block !important;
- width: calc(100% - 28px) !important;
- box-sizing: border-box !important;
- margin: 8px 14px 0 !important;
- padding: 7px 10px !important;
- height: auto !important;
- min-height: unset !important;
- background: var(--theme-elevation-50, #111) !important;
- border: 1px solid var(--theme-elevation-150, #222) !important;
- border-radius: 6px !important;
- color: var(--theme-text, #fff) !important;
- font-size: 0.75rem !important;
- line-height: 1.4 !important;
- outline: none !important;
- transition: border-color 0.2s !important;
+.ole-spotlight-count {
+ font-size: 0.62rem;
+ opacity: 0.35;
}
-.ole-root .ole-pool-search:focus {
- border-color: var(--theme-elevation-300, #444) !important;
+.ole-spotlight-list {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
}
-.ole-root .ole-pool-search::placeholder {
- color: var(--theme-text, #fff);
- opacity: 0.2;
+.ole-spotlight-entry {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ background: var(--theme-elevation-50, #111);
+ border: 1px solid var(--theme-elevation-150, #222);
+ border-radius: 6px;
+ padding: 8px 10px;
+}
+.ole-spotlight-entry-name {
+ font-size: 0.74rem;
+ font-weight: 600;
}
-.ole-pool-list {
+.ole-spotlight-input {
flex: 1;
- overflow-y: auto;
- padding: 6px 10px 16px;
+ min-width: 0;
+ background: var(--theme-elevation-100, #1a1a1a);
+ border: 1px solid var(--theme-elevation-200, #333);
+ border-radius: 4px;
+ padding: 4px 8px;
+ font-size: 0.72rem;
+ color: var(--theme-text, #fff);
+ outline: none;
+ box-sizing: border-box;
+}
+.ole-spotlight-input:focus {
+ border-color: var(--theme-elevation-400, #555);
+}
+.ole-spotlight-input::placeholder {
+ opacity: 0.35;
+}
+.ole-spotlight-entry-actions {
display: flex;
- flex-direction: column;
- gap: 1px;
+ gap: 4px;
+ flex-shrink: 0;
}
-.ole-pool-list::-webkit-scrollbar {
- width: 4px;
+.ole-spotlight-btn {
+ background: var(--theme-elevation-100, #1a1a1a);
+ border: 1px solid var(--theme-elevation-200, #333);
+ border-radius: 4px;
+ color: var(--theme-text, #fff);
+ cursor: pointer;
+ font-size: 0.75rem;
+ padding: 3px 7px;
+ line-height: 1;
+ opacity: 0.7;
+ transition: opacity 0.15s;
}
-.ole-pool-list::-webkit-scrollbar-track {
- background: transparent;
+.ole-spotlight-btn:hover:not(:disabled) {
+ opacity: 1;
}
-.ole-pool-list::-webkit-scrollbar-thumb {
- background: var(--theme-elevation-200, #333);
+.ole-spotlight-btn:disabled {
+ opacity: 0.2;
+ cursor: default;
+}
+.ole-spotlight-remove {
+ color: #e55;
+}
+.ole-spotlight-add {
+ position: relative;
+}
+.ole-spotlight-search {
+ display: block;
+ width: 100%;
+ box-sizing: border-box;
+ background: var(--theme-elevation-50, #111);
+ border: 1px solid var(--theme-elevation-200, #333);
border-radius: 4px;
+ padding: 6px 8px;
+ font-size: 0.72rem;
+ color: var(--theme-text, #fff);
+ outline: none;
}
-.ole-pool-empty {
- text-align: center;
- padding: 32px 16px;
- opacity: 0.15;
+.ole-spotlight-search:focus {
+ border-color: var(--theme-elevation-400, #555);
+}
+.ole-spotlight-search::placeholder {
+ opacity: 0.35;
+}
+.ole-spotlight-dropdown {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ right: 0;
+ max-height: 160px;
+ overflow-y: auto;
+ background: var(--theme-elevation-100, #1a1a1a);
+ border: 1px solid var(--theme-elevation-200, #333);
+ border-radius: 4px;
+ z-index: 100;
+ overflow: hidden;
+}
+.ole-column button.ole-spotlight-user-option {
+ display: block;
+ width: 100%;
+ text-align: left;
+ padding: 8px 12px;
font-size: 0.75rem;
+ color: var(--theme-text, #fff);
+ background: transparent;
+ border: none;
+ cursor: pointer;
+ transition: background 0.1s;
+}
+.ole-column button.ole-spotlight-user-option:hover {
+ background: var(--theme-elevation-200, #333);
+}
+
+/* ---- Pool ---- */
+.ole-pool {
+ border-left: 1px solid var(--theme-elevation-100, #181818);
+ background: var(--theme-bg, #0a0a0a);
+ display: flex;
+ flex-direction: column;
+ height: calc(100vh - 53px);
+ position: sticky;
+ top: 53px;
+}
+@media (max-width: 1100px) {
+ .ole-pool {
+ border-left: none;
+ border-top: 1px solid var(--theme-elevation-100, #181818);
+ height: auto;
+ max-height: 500px;
+ position: static;
+ }
}
/* Pool card */
@@ -523,7 +525,6 @@
font-size: 0.64rem;
opacity: 0.35;
}
-
.ole-used {
opacity: 0.35;
}
@@ -539,6 +540,32 @@
color: #22c55e;
}
+/* Pool search */
+.ole-root .ole-pool-search {
+ display: block !important;
+ width: calc(100% - 28px) !important;
+ box-sizing: border-box !important;
+ margin: 8px 14px 0 !important;
+ padding: 7px 10px !important;
+ height: auto !important;
+ min-height: unset !important;
+ background: var(--theme-elevation-50, #111) !important;
+ border: 1px solid var(--theme-elevation-150, #222) !important;
+ border-radius: 6px !important;
+ color: var(--theme-text, #fff) !important;
+ font-size: 0.75rem !important;
+ line-height: 1.4 !important;
+ outline: none !important;
+ transition: border-color 0.2s !important;
+}
+.ole-root .ole-pool-search:focus {
+ border-color: var(--theme-elevation-300, #444) !important;
+}
+.ole-root .ole-pool-search::placeholder {
+ color: var(--theme-text, #fff);
+ opacity: 0.2;
+}
+
/* Dragging states */
.ole-dragging {
opacity: 0.3;
@@ -583,150 +610,49 @@
text-overflow: ellipsis;
}
-/* ---- Spotlight section ---- */
-.ole-column .ole-spotlight-section {
- background: var(--theme-elevation-100, #1a1a1a);
- border: 1px solid var(--theme-elevation-200, #2a2a2a);
- border-radius: 8px;
- overflow: visible;
-}
-.ole-column .ole-spotlight-header {
- display: flex;
- align-items: baseline;
- justify-content: space-between;
- flex-wrap: wrap;
- gap: 8px 12px;
- padding: 8px 10px;
- background: var(--theme-elevation-50, #151515);
- border-bottom: 1px solid var(--theme-elevation-150, #222);
-}
-.ole-column h3.ole-spotlight-title {
- margin: 0;
- font-size: 0.68rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.06em;
- opacity: 0.4;
-}
-.ole-column .ole-spotlight-count {
- font-size: 0.68rem;
- color: var(--theme-text, #fff);
- opacity: 0.4;
-}
-.ole-column .ole-spotlight-list {
- display: flex;
- flex-direction: column;
- gap: 8px;
- margin: 0;
- padding: 10px 10px 8px;
-}
-.ole-column .ole-spotlight-entry {
- display: flex;
- align-items: flex-start;
- gap: 10px;
- background: var(--theme-elevation-50, #111);
- border: 1px solid var(--theme-elevation-150, #222);
- border-radius: 6px;
- padding: 8px 10px;
- flex-wrap: wrap;
-}
-.ole-column .ole-spotlight-entry-name {
- font-size: 0.78rem;
- font-weight: 600;
- white-space: nowrap;
- min-width: 120px;
- flex-shrink: 0;
-}
-.ole-column input.ole-spotlight-input {
- flex: 1;
- min-width: 140px;
- background: var(--theme-elevation-100, #1a1a1a);
- border: 1px solid var(--theme-elevation-200, #333);
- border-radius: 4px;
- padding: 4px 8px;
- font-size: 0.75rem;
- color: var(--theme-text, #fff);
- outline: none;
-}
-.ole-column input.ole-spotlight-input:focus {
- border-color: var(--theme-elevation-400, #555);
-}
-.ole-column input.ole-spotlight-input::placeholder {
- opacity: 0.35;
-}
-.ole-column .ole-spotlight-entry-actions {
- display: flex;
- gap: 4px;
- flex-shrink: 0;
+/* ---- Image toggle ---- */
+.ole-image-toggle {
+ display: inline-flex !important;
+ flex-direction: row !important;
+ align-items: center !important;
+ align-self: center !important;
+ gap: 4px !important;
+ font-size: 0.68rem !important;
+ font-weight: 600 !important;
+ line-height: 1 !important;
+ text-transform: uppercase !important;
+ letter-spacing: 0.06em !important;
+ color: var(--theme-text, #fff) !important;
+ opacity: 0.4 !important;
+ cursor: pointer !important;
+ margin: 0 !important;
+ padding: 0 !important;
}
-.ole-column button.ole-spotlight-btn {
- background: var(--theme-elevation-100, #1a1a1a);
- border: 1px solid var(--theme-elevation-200, #333);
- border-radius: 4px;
- color: var(--theme-text, #fff);
+.ole-image-toggle input {
cursor: pointer;
- font-size: 0.75rem;
- padding: 3px 7px;
- line-height: 1;
- opacity: 0.7;
- transition: opacity 0.15s;
-}
-.ole-column button.ole-spotlight-btn:hover:not(:disabled) {
- opacity: 1;
-}
-.ole-column button.ole-spotlight-btn:disabled {
- opacity: 0.2;
- cursor: default;
-}
-.ole-column .ole-spotlight-remove {
- color: #e55;
+ margin: 0 !important;
+ flex-shrink: 0;
+ position: relative;
+ top: 1px;
}
-.ole-column .ole-spotlight-add {
+.ole-image-toggle span {
position: relative;
- padding: 0 10px 10px;
- max-width: none;
+ top: -1px;
}
-.ole-column input.ole-spotlight-search {
- display: block;
- width: 100%;
+
+/* ---- Add slot button ---- */
+.ole-add-slot-btn {
background: var(--theme-elevation-50, #111);
- border: 1px solid var(--theme-elevation-200, #333);
- border-radius: 4px;
- padding: 7px 10px;
- font-size: 0.75rem;
- color: var(--theme-text, #fff);
- outline: none;
- box-sizing: border-box;
-}
-.ole-column input.ole-spotlight-search:focus {
- border-color: var(--theme-elevation-400, #555);
-}
-.ole-column input.ole-spotlight-search::placeholder {
- opacity: 0.35;
-}
-.ole-column .ole-spotlight-dropdown {
- position: absolute;
- top: calc(100% + 4px);
- left: 0;
- right: 0;
- background: var(--theme-elevation-100, #1a1a1a);
- border: 1px solid var(--theme-elevation-200, #333);
- border-radius: 4px;
- z-index: 100;
- overflow: hidden;
-}
-.ole-column button.ole-spotlight-user-option {
- display: block;
- width: 100%;
- text-align: left;
- padding: 8px 12px;
- font-size: 0.75rem;
+ border: 1px dashed var(--theme-elevation-300, #444);
+ border-radius: 6px;
color: var(--theme-text, #fff);
- background: transparent;
- border: none;
cursor: pointer;
- transition: background 0.1s;
+ font-size: 0.72rem;
+ padding: 10px;
+ opacity: 0.4;
+ transition: opacity 0.15s;
+ text-align: center;
}
-.ole-column button.ole-spotlight-user-option:hover {
- background: var(--theme-elevation-200, #333);
+.ole-add-slot-btn:hover {
+ opacity: 0.7;
}