diff --git a/.env.development b/.env.development index 5d22305c..a3c5eafd 100644 --- a/.env.development +++ b/.env.development @@ -1,9 +1,8 @@ -REACT_APP_BASE_URL=http://localhost:9002 +REACT_APP_BASE_URL=http://localhost:3002 REACT_APP_WALLET_BASE_URL=http://localhost:9003 REACT_APP_ASSETS_BUCKET=http://localhost REACT_APP_DEMO_MODE=false REACT_APP_BASENAME= - # Nostr operations now use panel API - no relay URLs needed # More info https://create-react-app.dev/docs/advanced-configuration diff --git a/index.css b/index.css new file mode 100644 index 00000000..a780b5d5 --- /dev/null +++ b/index.css @@ -0,0 +1,3932 @@ +/* Import KaTeX CSS for LaTeX math rendering */ +@import 'katex/dist/katex.min.css'; +@import "./liquid-glass.css"; + +/* Import Fira Code and Tiempos fonts from Google Fonts */ +@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600&family=Tiempos+Text:ital,wght@0,400;0,500;1,400&display=swap'); +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --middle-header-height: 4.5em; + --titlebar-height: 2em; + /* Default value */ +} + +html { + font-size: 15px; +} + +.btn, +.input { + @apply rounded-md; +} + +/*Mui Switch*/ + +/* Constant style */ +.MuiSwitch-root .MuiSwitch-track { + @apply !bg-base-100; +} + +/* Online*/ +.MuiSwitch-switchBase.Mui-checked { + @apply !text-success brightness-90; +} + +.MuiSwitch-root.switch-checked-online .MuiSwitch-track { + @apply !bg-success; +} +/* Connecting */ + .MuiSwitch-root.connecting .MuiSwitch-switchBase { + @apply !text-warning/85 brightness-75 +} + +.MuiSwitch-root.connecting .MuiSwitch-track { + @apply !bg-warning/70; +} + +/* Offline*/ + .MuiSwitch-root.offline .MuiSwitch-switchBase { + @apply !text-error/85 brightness-75 +} + +.MuiSwitch-root.offline .MuiSwitch-track { + @apply !bg-error/70; +} + +/* Default theme */ +.btn-primary { + @apply text-base-content bg-gradient-to-t from-secondary to-primary; + border-width: 0px; + transition: background 0.3s ease; +} + +.btn-neutral { + @apply bg-neutral border-none; +} + +.btn-neutral:hover { + @apply bg-neutral opacity-90; +} + +[data-theme="light"] .btn-neutral { + @apply bg-neutral border-none text-white; +} + +.btn-code-blame { + text-transform: none !important; + font-weight: 600 !important; + font-size: 1rem !important; + border-color: rgba(255, 255, 255, 0.15) !important; + border-width: 1px !important; +} + +.btn-settings-upload { + min-height: 2rem; + height: 2.5rem; + max-height: 2.5rem; +} + +[data-theme="dark"] .btn-code-blame { + border-color: rgba(255, 255, 255, 0.15) !important; +} + +[data-theme="light"] .btn-code-blame { + border-color: rgba(0, 0, 0, 0.15) !important; +} + +[data-theme="light"] .btn-code-blame.unselected { + border-color: rgba(0, 0, 0, 0.15) !important; + color: black !important; +} + +.btn-file-content { + opacity: 60% !important; +} + +[data-theme="light"] .btn-file-content { + opacity: 60% !important; + color: black !important; +} + +[data-theme="dark"] .btn-file-content { + @apply !fill-text-primary; + opacity: 60% !important; +} + +.btn-primary:hover { + @apply bg-gradient-to-t from-secondary to-primary opacity-90; +} + +/* Dark theme */ +[data-theme="dark"] .btn-primary { + @apply bg-gradient-to-t from-secondary to-primary; +} + +[data-theme="dark"] .btn-primary:hover { + @apply bg-gradient-to-t from-secondary to-primary opacity-90; +} + +/* Light theme */ +[data-theme="light"] .btn-primary { + @apply bg-gradient-to-t from-secondary to-primary text-white; +} + +[data-theme="light"] .btn-primary:hover { + @apply bg-gradient-to-t from-secondary to-primary opacity-90; +} + +/* Iris theme */ +[data-theme="iris"] .btn-primary { + @apply bg-gradient-to-t from-secondary to-primary; +} + +[data-theme="iris"] .btn-primary:hover { + @apply bg-gradient-to-t from-secondary to-primary; + box-shadow: 0 0 10px var(--tw-gradient-from); +} + +iframe { + @apply max-w-full; +} + +/* FORCE HIDE ALL SCROLLBARS - MAXIMUM SPECIFICITY */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video, main, button, input, select, textarea, +*, *::before, *::after { + /* Firefox */ + scrollbar-width: none !important; + /* IE/Edge */ + -ms-overflow-style: none !important; +} + +/* Webkit browsers - ALL elements and pseudo-elements */ +html::-webkit-scrollbar, body::-webkit-scrollbar, div::-webkit-scrollbar, +*::-webkit-scrollbar, *::before::-webkit-scrollbar, *::after::-webkit-scrollbar { + width: 0 !important; + height: 0 !important; + display: none !important; +} + +/* Ensure Ant Design components also hide scrollbars */ +.ant-layout::-webkit-scrollbar, +.ant-layout-content::-webkit-scrollbar, +.ant-layout-sider::-webkit-scrollbar, +.ant-card::-webkit-scrollbar, +.ant-card-body::-webkit-scrollbar, +.ant-modal::-webkit-scrollbar, +.ant-modal-body::-webkit-scrollbar, +.ant-table::-webkit-scrollbar, +.ant-table-body::-webkit-scrollbar, +.ant-select-dropdown::-webkit-scrollbar, +.ant-dropdown::-webkit-scrollbar, +.ant-drawer::-webkit-scrollbar, +.ant-drawer-body::-webkit-scrollbar, +.ant-menu::-webkit-scrollbar, +.ant-list::-webkit-scrollbar, +.ant-collapse::-webkit-scrollbar, +.ant-tabs-content::-webkit-scrollbar { + width: 0 !important; + height: 0 !important; + display: none !important; +} + +/* Firefox/IE for Ant Design components */ +.ant-layout, +.ant-layout-content, +.ant-layout-sider, +.ant-card, +.ant-card-body, +.ant-modal, +.ant-modal-body, +.ant-table, +.ant-table-body, +.ant-select-dropdown, +.ant-dropdown, +.ant-drawer, +.ant-drawer-body, +.ant-menu, +.ant-list, +.ant-collapse, +.ant-tabs-content { + scrollbar-width: none !important; + -ms-overflow-style: none !important; +} + +/* For elements that should explicitly show scrollbars, add class .show-scrollbar */ +.show-scrollbar { + /* Firefox */ + scrollbar-width: thin !important; + /* IE/Edge */ + -ms-overflow-style: auto !important; +} + +.show-scrollbar::-webkit-scrollbar { + width: 8px !important; + height: 8px !important; + display: block !important; +} + +.show-scrollbar::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.05) !important; + border-radius: 4px !important; +} + +.show-scrollbar::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.2) !important; + border-radius: 4px !important; +} + +/* Custom scrollbar for FileContent component */ +.custom-scrollbar::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +.custom-scrollbar { + scrollbar-width: thin; +} + +/* Utility class to prevent text selection and highlighting */ +.no-highlight { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-touch-callout: none; + -webkit-tap-highlight-color: transparent; +} + +/* Apply no-highlight to all UI chrome by default */ +nav, header, aside, .btn, .menu, .navbar, .sidebar, .dropdown, +.modal-box, .badge, .tabs, .form-control, .input, .select, +.toggle, .checkbox, .radio, .range, .file-input, .breadcrumbs, +.pagination, .steps, .alert, .toast, .loading, .progress, .radial-progress, +.countdown, .stat, .divider, .mask, .skeleton, .collapse, +.carousel, .indicator, .swap, .tooltip, .drawer, .rating, +.artboard, .phone-mockup, .window-mockup, .browser-mockup, +.code-mockup, .kbd, .link-hover, .link-primary, .link-secondary, +.btn-group, .join, .stack, .avatar-group, +/* Profile-specific UI elements */ +.followers-info, .follower-count, .follow-button, .profile-stats, +.tab-navigation, .user-actions, .profile-badges, .social-links { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-touch-callout: none; + -webkit-tap-highlight-color: transparent; +} + +/* Allow text selection only in content areas */ +.highlight-allowed, .prose, [role="main"] article, .post-content { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +/* Force no selection on UI elements even within highlight-allowed areas */ +.highlight-allowed .no-highlight, +.highlight-allowed .btn, +.highlight-allowed .badge, +.highlight-allowed .tabs, +.highlight-allowed button, +.highlight-allowed .avatar-group, +.highlight-allowed [class*="btn-"], +.highlight-allowed [class*="flex"][class*="gap-"], +.highlight-allowed .cursor-pointer { + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; + -webkit-touch-callout: none !important; + -webkit-tap-highlight-color: transparent !important; +} + +/* src/shared/styles/scrollbar.css */ +.scrollbar-hide { + -ms-overflow-style: none; + /* Internet Explorer 10+ */ + scrollbar-width: none; + /* Firefox */ +} + +.scrollbar-hide::-webkit-scrollbar { + display: none; + /* Safari and Chrome */ +} + +/* Fix modal scrollbar compensation issue */ +/* Reserve space for scrollbar to prevent layout shift without showing it */ +html { + scrollbar-gutter: stable; +} + +/* Prevent layout shift when dialog opens by maintaining overflow */ +dialog[open] { + /* Ensure the dialog doesn't affect body scrollbar */ + overflow: auto; +} + +/* Prevent body from losing scrollbar space when modal opens */ +body:has(dialog[open]) { + /* Maintain normal overflow behavior */ + overflow: auto !important; + /* Prevent any margin adjustments */ + margin-right: 0 !important; +} + +/* Hide scrollbars completely when modals are open - cross-browser */ +html:has(dialog[open])::-webkit-scrollbar { + display: none !important; +} + +html:has(dialog[open]) { + /* Reserve space but hide scrollbar completely */ + overflow-y: scroll !important; + scrollbar-width: none !important; /* Firefox */ + -ms-overflow-style: none !important; /* IE/Edge */ +} + +/* Ensure body doesn't get overflow hidden when modal opens */ +body:has(dialog[open]) { + overflow-y: visible !important; +} + + +/* modals */ + +.modal-box { + max-width: fit-content !important; +} + +/* mui tabs */ + +.MuiTab-root.Mui-selected { + color: #c6c8d3 !important; +} + +/* Electron window controls */ +.app-drag-region { + -webkit-app-region: drag; + -webkit-user-select: none; +} + +.app-no-drag { + -webkit-app-region: no-drag; +} + +.safeContentBrowser { + height: calc(100vh - var(--middle-header-height)); +} + +.safeContentElectron { + height: calc(100vh - var(--middle-header-height) - var(--titlebar-height)); +} + +.searchBox { + @apply border-[--border-color] border-[2px] !rounded-md !bg-base-100 +} + +/* ============================================= */ +/* SELECTIVE SEARCHBOX BEVEL REMOVAL */ +/* ============================================= */ + +/* Only remove bevel effect from UserToolbar search inputs (top-right search) */ +.fixed.z-50.right-5 input.bg-base-300, +.fixed.z-50.right-5 input[class*="bg-base-300"], +.fixed.z-50.right-5 .bg-base-300 input { + box-shadow: none !important; +} + +/* Remove bevel effect from search page UserToolbar */ +body:has(header:contains("Search")) .fixed.z-50.right-5 input.bg-base-300, +body:has(header:contains("Search")) .fixed.z-50.right-5 input[class*="bg-base-300"], +body:has(header:contains("Search")) .fixed.z-50.right-5 .bg-base-300 input { + box-shadow: none !important; +} + +/* Enhanced focus state for UserToolbar search inputs */ +.fixed.z-50.right-5 input:focus, +.fixed.z-50.right-5 input:focus-visible { + --tw-ring-color: var(--primary) !important; + --tw-ring-offset-color: transparent !important; + box-shadow: + 0 0 0 2px var(--primary, #007AFF), + 0 0 15px rgba(0, 122, 255, 0.3) !important; + outline: 2px solid var(--primary, #007AFF) !important; + outline-offset: 0 !important; + border-color: var(--primary, #007AFF) !important; + transition: all 0.2s ease !important; +} + +/* Theme-specific focus glow colors */ +[data-theme="liquid-glass"] .fixed.z-50.right-5 input:focus { + box-shadow: + 0 0 0 2px rgba(255, 255, 255, 0.5), + 0 0 20px rgba(255, 255, 255, 0.3) !important; + outline-color: rgba(255, 255, 255, 0.5) !important; + border-color: rgba(255, 255, 255, 0.5) !important; +} + +[data-theme="liquid-blue"] .fixed.z-50.right-5 input:focus { + box-shadow: + 0 0 0 2px rgba(0, 255, 255, 0.6), + 0 0 20px rgba(0, 255, 255, 0.4) !important; + outline-color: rgba(0, 255, 255, 0.6) !important; + border-color: rgba(0, 255, 255, 0.6) !important; +} + +/* Fix for FollowList search input (thread viewer) - use internal glow to prevent clipping */ +.sticky.top-0.z-9 input[placeholder="Search profiles..."]:focus, +.sticky.top-0.z-9 input[placeholder="Search profiles..."]:focus-visible { + /* Remove external outline and ring */ + outline: none !important; + --tw-ring-color: transparent !important; + --tw-ring-offset-color: transparent !important; + + /* Use internal box-shadow for glow effect */ + box-shadow: + inset 0 0 0 2px var(--primary, #007AFF), + inset 0 0 12px rgba(0, 122, 255, 0.25) !important; + border-color: var(--primary, #007AFF) !important; + transition: all 0.2s ease !important; +} + +/* Theme-specific internal glow for FollowList search */ +[data-theme="liquid-glass"] .sticky.top-0.z-9 input[placeholder="Search profiles..."]:focus { + box-shadow: + inset 0 0 0 2px rgba(255, 255, 255, 0.5), + inset 0 0 15px rgba(255, 255, 255, 0.25) !important; + border-color: rgba(255, 255, 255, 0.5) !important; +} + +[data-theme="liquid-blue"] .sticky.top-0.z-9 input[placeholder="Search profiles..."]:focus { + box-shadow: + inset 0 0 0 2px rgba(0, 255, 255, 0.6), + inset 0 0 15px rgba(0, 255, 255, 0.35) !important; + border-color: rgba(0, 255, 255, 0.6) !important; +} + +[data-theme="dark"] .sticky.top-0.z-9 input[placeholder="Search profiles..."]:focus { + box-shadow: + inset 0 0 0 2px rgba(255, 255, 255, 0.4), + inset 0 0 12px rgba(255, 255, 255, 0.2) !important; + border-color: rgba(255, 255, 255, 0.4) !important; +} + +[data-theme="dim"] .sticky.top-0.z-9 input[placeholder="Search profiles..."]:focus { + box-shadow: + inset 0 0 0 2px rgba(255, 255, 255, 0.35), + inset 0 0 12px rgba(255, 255, 255, 0.15) !important; + border-color: rgba(255, 255, 255, 0.35) !important; +} + +[data-theme="light"] .sticky.top-0.z-9 input[placeholder="Search profiles..."]:focus { + box-shadow: + inset 0 0 0 2px rgba(0, 122, 255, 0.8), + inset 0 0 12px rgba(0, 122, 255, 0.2) !important; + border-color: rgba(0, 122, 255, 0.8) !important; +} + +/* Liquid Glass Theme Definition */ +[data-theme="liquid-glass"] { + /* Override base colors for liquid glass theme */ + --base-100: rgba(255, 255, 255, 0.02); + --base-200: rgba(255, 255, 255, 0.04); + --base-300: rgba(255, 255, 255, 0.06); + --base-content: rgba(255, 255, 255, 0.95); + --neutral: rgba(255, 255, 255, 0.05); + --neutral-content: rgba(255, 255, 255, 0.95); + --primary: #007AFF; + --secondary: #AF52DE; + --accent: #32D2FF; + --info: #30B0C7; + --success: #34C759; + --warning: #FFCC00; + --error: #FF3B30; + --border-color: rgba(255, 255, 255, 0.1); + --text-primary: rgba(255, 255, 255, 0.95); + --text-secondary: rgba(255, 255, 255, 0.75); + --text-tertiary: rgba(255, 255, 255, 0.55); +} + +/* Liquid Blue Theme Definition - Tony Stark/Jarvis AI Futuristic Blue */ +[data-theme="liquid-blue"] { + /* Bright Neon Turquoise/Teal Color Palette */ + --primary: #00FFFF; /* Electric cyan - bright neon */ + --secondary: #00FFAA; /* Neon turquoise */ + --accent: #00DDFF; /* Bright neon teal */ + --info: #14B8A6; /* Teal */ + --success: #06B6D4; /* Cyan */ + --warning: #F59E0B; /* Amber warnings */ + --error: #EF4444; /* Red for errors */ + + /* Base colors with bright turquoise/teal tint */ + --base-100: rgba(20, 184, 166, 0.08); + --base-200: rgba(94, 234, 212, 0.12); + --base-300: rgba(153, 246, 228, 0.16); + --base-content: rgba(255, 255, 255, 0.95); + --neutral: rgba(20, 184, 166, 0.1); + --neutral-content: rgba(255, 255, 255, 0.95); + + /* Border and text colors with bright turquoise glow */ + --border-color: rgba(20, 184, 166, 0.15); + --text-primary: rgba(255, 255, 255, 0.95); /* Keep text white */ + --text-secondary: rgba(255, 255, 255, 0.9); /* Keep text white */ + --text-tertiary: rgba(255, 255, 255, 0.8); /* Keep text white */ + + /* Futuristic tab colors - neon turquoise */ + --tab-primary-rgb: 0, 255, 255; /* Electric cyan */ + --tab-secondary-rgb: 0, 255, 170; /* Neon turquoise */ +} + +/* Beautiful gradient background */ +[data-theme="liquid-glass"] html { + background: linear-gradient(135deg, var(--lg-gradient-start, #1e0033) 0%, var(--lg-gradient-end, #01579b) 100%) fixed !important; + min-height: 100vh; + color: rgba(255, 255, 255, 0.95); +} + +/* LIQUID BLUE BACKGROUND ANIMATIONS - MATCHING DASHBOARD */ +@keyframes liquidBackground { + 0%, 100% { + opacity: 0.6; + transform: scale(1) rotate(0deg); + } + 25% { + opacity: 0.8; + transform: scale(1.1) rotate(90deg); + } + 50% { + opacity: 1; + transform: scale(1.2) rotate(180deg); + } + 75% { + opacity: 0.8; + transform: scale(1.1) rotate(270deg); + } +} + +@keyframes liquidFlow { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +@keyframes rotate { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +/* Liquid Blue Futuristic Background - Neon Turquoise */ +[data-theme="liquid-blue"] html { + background: linear-gradient(135deg, + #0d9488 0%, /* Bright teal start */ + #14b8a6 25%, /* Turquoise */ + #00FFFF 50%, /* Electric cyan core */ + #5eead4 75%, /* Light turquoise */ + #99f6e4 100% /* Very light teal */ + ) fixed !important; + min-height: 100vh; + color: rgba(255, 255, 255, 0.95); + position: relative; +} + +/* Enhanced floating orbs for Arc Reactor Energy */ +[data-theme="liquid-blue"] html::before { + content: ''; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: + /* Bright neon turquoise core */ + radial-gradient(circle at 30% 70%, rgba(0, 255, 255, 1) 0%, transparent 30%), + /* Energy nodes - bright turquoise/teal */ + radial-gradient(circle at 70% 30%, rgba(0, 255, 170, 0.9) 0%, transparent 35%), + radial-gradient(circle at 50% 10%, rgba(20, 184, 166, 0.8) 0%, transparent 40%), + radial-gradient(circle at 20% 40%, rgba(94, 234, 212, 0.7) 0%, transparent 45%), + radial-gradient(circle at 80% 80%, rgba(153, 246, 228, 0.6) 0%, transparent 50%), + /* Energy streams - neon turquoise */ + linear-gradient(45deg, transparent 45%, rgba(0, 255, 255, 0.2) 50%, transparent 55%), + linear-gradient(-45deg, transparent 40%, rgba(0, 255, 170, 0.15) 50%, transparent 60%); + z-index: -1; + pointer-events: none; + animation: arc-reactor-glow 15s ease-in-out infinite; +} + +/* Disable animation when motion setting is enabled */ +[data-theme="liquid-blue"][data-disable-motion="true"] html::before { + animation: none; +} + +@keyframes arc-reactor-glow { + 0%, 100% { + opacity: 0.7; + filter: brightness(1.2) contrast(1.1); + } + 25% { + opacity: 0.9; + filter: brightness(1.4) contrast(1.2); + } + 50% { + opacity: 1; + filter: brightness(1.6) contrast(1.3); + } + 75% { + opacity: 0.9; + filter: brightness(1.4) contrast(1.2); + } +} + +/* Floating orbs effect overlay */ +[data-theme="liquid-glass"] body { + position: relative; + min-height: 100vh; + background: transparent !important; +} + +[data-theme="liquid-glass"] body::before { + content: ''; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: + radial-gradient(circle at 15% 50%, rgba(138, 43, 226, 0.4) 0%, transparent 35%), + radial-gradient(circle at 85% 30%, rgba(33, 150, 243, 0.35) 0%, transparent 40%), + radial-gradient(circle at 50% 90%, rgba(124, 77, 255, 0.3) 0%, transparent 45%), + radial-gradient(circle at 20% 20%, rgba(100, 181, 246, 0.25) 0%, transparent 50%), + radial-gradient(circle at 75% 75%, rgba(94, 53, 177, 0.3) 0%, transparent 50%); + z-index: -1; + pointer-events: none; +} + +/* Make backgrounds transparent to show gradient */ +[data-theme="liquid-glass"] .bg-base-100, +[data-theme="liquid-glass"] .bg-base-200, +[data-theme="liquid-glass"] .bg-base-300 { + background-color: transparent !important; +} + +[data-theme="liquid-glass"] main, +[data-theme="liquid-glass"] section { + background: transparent !important; +} + +/* Liquid Blue Theme - Transparent Backgrounds */ +[data-theme="liquid-blue"] .bg-base-100, +[data-theme="liquid-blue"] .bg-base-200, +[data-theme="liquid-blue"] .bg-base-300 { + background-color: transparent !important; +} + +/* Fix ProfileHeader dark box in liquid blue theme */ +[data-theme="liquid-blue"] .flex.flex-col.w-full.bg-base-200 { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; +} + +/* Remove animated background effects from profile pages in liquid themes */ +[data-theme="liquid-blue"] section.h-min-content html::before, +[data-theme="liquid-glass"] section.h-min-content html::before { + display: none !important; +} + +[data-theme="liquid-blue"] section.h-min-content main::before, +[data-theme="liquid-blue"] section.h-min-content main::after, +[data-theme="liquid-glass"] section.h-min-content main::before, +[data-theme="liquid-glass"] section.h-min-content main::after { + display: none !important; +} + +[data-theme="liquid-blue"] main, +[data-theme="liquid-blue"] section { + background: transparent !important; +} + +/* Create glass effect for left sidebar WITHOUT affecting width */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end { + position: relative; + isolation: isolate; + /* NO WIDTH DECLARATIONS - let children determine width */ +} + +/* Glass background effect - visual only */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end::before { + content: ''; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(255, 255, 255, 0.03); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + border-radius: 0 16px 0 0; + z-index: -1; + box-shadow: + 0 0 20px rgba(138, 43, 226, 0.15), + 0 0 40px rgba(33, 150, 243, 0.1), + inset 0 2px 3px rgba(255, 255, 255, 0.2), + inset 0 -2px 3px rgba(0, 0, 0, 0.15), + 0 12px 40px rgba(0, 0, 0, 0.2); + pointer-events: none; +} + +/* Animated jelly border - visual only */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end::after { + content: ''; + position: absolute; + top: -3px; + left: -3px; + bottom: -3px; + right: -3px; + background: linear-gradient( + 45deg, + rgba(138, 43, 226, 0.25), + rgba(33, 150, 243, 0.25), + rgba(124, 77, 255, 0.25), + rgba(138, 43, 226, 0.25) + ); + background-size: 300% 300%; + border-radius: 0 19px 0 0; + z-index: -2; + filter: blur(6px); + opacity: 0.7; + animation: subtle-jelly-border 10s ease-in-out infinite; + pointer-events: none; +} + +/* Disable animation when motion setting is enabled */ +[data-theme="liquid-glass"][data-disable-motion="true"] .flex.flex-col.h-full.self-end::after { + animation: none; +} + +@keyframes subtle-jelly-border { + 0%, 100% { + background-position: 0% 50%; + } + 25% { + background-position: 50% 25%; + } + 50% { + background-position: 100% 50%; + } + 75% { + background-position: 50% 75%; + } +} + +/* Glass highlight - visual only */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end > div:first-child::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 120px; + background: linear-gradient( + to bottom, + rgba(255, 255, 255, 0.12) 0%, + rgba(255, 255, 255, 0.05) 30%, + transparent 100% + ); + border-radius: 0 16px 0 0; + pointer-events: none; + z-index: 2; +} + +/* Make sidebars transparent to show glass effect */ +[data-theme="liquid-glass"] .w-20.overflow-x-hidden.border-r, +[data-theme="liquid-glass"] .bg-base-100.sticky.h-full.left-0.top-0 { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; +} + +/* Ensure content is above glass effects */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end > * { + position: relative; + z-index: 1; +} + +/* Fix overflow issues and height for left sidebar glass effects */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end { + overflow: hidden; + contain: layout style paint; + /* Make sidebar fill full viewport height to eliminate black gap */ + min-height: 100vh; + height: 100vh; +} + +/* Prevent glass pseudo-elements from extending beyond sidebar bounds */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end::before, +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end::after { + contain: layout style paint; + overflow: hidden; +} + +/* Reduce opacity of glass background to prevent dark areas */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end::before { + background: rgba(255, 255, 255, 0.02) !important; /* Much lighter background */ +} + +/* Prevent glass effects from causing scrollbars by ensuring they don't extend beyond viewport */ +[data-theme="liquid-glass"] *::before, +[data-theme="liquid-glass"] *::after { + box-sizing: border-box; + max-width: 100%; + max-height: 100%; +} + +/* Ensure glass effects don't affect document flow */ +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end::before, +[data-theme="liquid-glass"] .flex.flex-col.h-full.self-end::after { + position: absolute; + pointer-events: none; +} + +/* Make SideBarToolBar background transparent */ +[data-theme="liquid-glass"] .flex.items-center.justify-center.h-1\/6 { + background: transparent !important; +} + +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 { + background: transparent !important; +} + +/* Style SideBarToolBar buttons - transparent with no borders */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 button, +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 a, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 a { + background: transparent !important; + border: none !important; + box-shadow: none !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + color: rgba(255, 255, 255, 0.8) !important; + transition: box-shadow 0.2s ease !important; +} + +/* SideBarToolBar glass effect on icons */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 svg, +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 a svg, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 svg, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 a svg { + opacity: 0.95; + filter: drop-shadow(0 0 6px rgba(255, 255, 255, 0.4)) blur(0.5px); + transition: all 0.3s ease; +} + +/* SideBarToolBar hover effects - enhanced icon glow */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 button:hover svg, +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 a:hover svg, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:hover svg, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 a:hover svg { + opacity: 1; + filter: drop-shadow(0 0 8px rgba(138, 43, 226, 0.5)) drop-shadow(0 0 12px rgba(33, 150, 243, 0.4)) blur(0.5px) !important; +} + +/* FEEDS BUTTON ONLY (3rd position in 2x2 grid) - conjoined glow system */ +/* When hovering over Feeds icon - glow both icon and text */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 button:nth-child(3):has(svg:hover) svg, +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 button:nth-child(3):has(svg:hover) span, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:nth-child(3):has(svg:hover) svg, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:nth-child(3):has(svg:hover) span { + filter: drop-shadow(0 0 12px rgba(138, 43, 226, 0.8)) drop-shadow(0 0 18px rgba(33, 150, 243, 0.7)) drop-shadow(0 0 24px rgba(255, 255, 255, 0.6)) !important; +} + +/* When hovering over Feeds text - glow both text and icon */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 button:nth-child(3):has(span:hover) svg, +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 button:nth-child(3):has(span:hover) span, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:nth-child(3):has(span:hover) svg, +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:nth-child(3):has(span:hover) span { + filter: drop-shadow(0 0 12px rgba(138, 43, 226, 0.8)) drop-shadow(0 0 18px rgba(33, 150, 243, 0.7)) drop-shadow(0 0 24px rgba(255, 255, 255, 0.6)) !important; +} + +/* NEW POST BUTTON ONLY - conjoined glow system */ +/* When hovering over new post icon - glow both icon and text */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 button:has(div[class*="rounded-md"]:hover) div[class*="rounded-md"], +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:has(div[class*="rounded-md"]:hover) div[class*="rounded-md"] { + box-shadow: 0 0 8px rgba(138, 43, 226, 0.6), 0 0 12px rgba(33, 150, 243, 0.5), 0 0 16px rgba(255, 255, 255, 0.4) !important; +} + +/* When hovering over new post text - glow both text and icon */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-2.p-2 button:has(span:hover) div[class*="rounded-md"], +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:has(span:hover) div[class*="rounded-md"] { + box-shadow: 0 0 8px rgba(138, 43, 226, 0.6), 0 0 12px rgba(33, 150, 243, 0.5), 0 0 16px rgba(255, 255, 255, 0.4) !important; +} + +/* Hover and active states removed */ + +/* Active/selected state highlight removed */ + +/* Style the New Post button gradient background - remove borders */ +[data-theme="liquid-glass"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 .bg-gradient-to-t { + background: linear-gradient(135deg, var(--primary), var(--secondary)) !important; + border-radius: 0.5rem !important; /* Slightly rounder for softer look */ + border: none !important; +} + +/* Remove inner glow pseudo-elements - keep buttons clean */ + +/* Create unified jelly glass container for feed + right nav */ +[data-theme="liquid-glass"] main { + position: relative; + background: transparent !important; + overflow: visible; + isolation: isolate; + align-self: stretch !important; + margin-top: 0 !important; + border-left: 1px solid rgba(255, 255, 255, 0.03); +} + +/* Liquid Blue Main Container - Futuristic AI Interface */ +[data-theme="liquid-blue"] main { + position: relative; + background: transparent !important; + overflow: visible; + isolation: isolate; + align-self: stretch !important; + margin-top: 0 !important; + border-left: 1px solid rgba(0, 255, 255, 0.2); +} + +/* Unified glass background spanning feed and right nav */ +[data-theme="liquid-glass"] main::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.03); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + border-radius: 0; /* Removed rounded edges */ + z-index: 0; + box-shadow: + 0 0 20px rgba(33, 150, 243, 0.15), + 0 0 40px rgba(138, 43, 226, 0.1), + inset 0 2px 3px rgba(255, 255, 255, 0.2), + inset 0 -2px 3px rgba(0, 0, 0, 0.15), + 0 12px 40px rgba(0, 0, 0, 0.2); +} + +/* Animated jelly border for unified feed + right nav */ +[data-theme="liquid-glass"] main::after { + content: ''; + position: absolute; + top: -3px; + left: -3px; + right: -3px; + bottom: -3px; + background: linear-gradient( + 45deg, + rgba(33, 150, 243, 0.25), + rgba(124, 77, 255, 0.25), + rgba(138, 43, 226, 0.25), + rgba(33, 150, 243, 0.25) + ); + background-size: 300% 300%; + border-radius: 0; /* Removed rounded edges */ + z-index: -1; + filter: blur(6px); + opacity: 0.7; + animation: subtle-jelly-border 10s ease-in-out infinite; +} + +/* Disable animation when motion setting is enabled */ +[data-theme="liquid-glass"][data-disable-motion="true"] main::after { + animation: none; +} + +/* Ensure MainFeed and RightColumn fill available height */ +[data-theme="liquid-glass"] main > div { + height: 100%; +} + +/* Make all main content children position relative for proper stacking */ +[data-theme="liquid-glass"] main > * { + position: relative; + z-index: 1; +} + +/* Top glass highlight for feed/right nav */ +[data-theme="liquid-glass"] main::before { + border-radius: 0; /* Removed rounded edges */ +} + +/* Remove borders between feed and right nav to unify them */ +[data-theme="liquid-glass"] .w-1\/3.block .bg-base-200, +[data-theme="liquid-glass"] .w-full.sticky .bg-base-200 { + background: transparent !important; + border: none !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; +} + +/* Make feed area transparent to show unified glass */ +[data-theme="liquid-glass"] main > div:first-child { + background: transparent !important; +} + +/* Make right column transparent */ +[data-theme="liquid-glass"] .w-1\/3.block { + background: transparent !important; +} + +/* Additional glass highlight for top of feed/right nav area */ +[data-theme="liquid-glass"] main > div:first-child::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 120px; + background: linear-gradient( + to bottom, + rgba(255, 255, 255, 0.1) 0%, + rgba(255, 255, 255, 0.04) 30%, + transparent 100% + ); + pointer-events: none; + z-index: 2; + border-radius: 0; /* Square corners to prevent visible rounded edge */ +} + +/* Glass styles for components */ +[data-theme="liquid-glass"] .lg-glass { + background: rgba(255, 255, 255, var(--lg-glass-opacity, 0.03)) !important; + backdrop-filter: blur(var(--lg-blur-amount, 20px)) !important; + -webkit-backdrop-filter: blur(var(--lg-blur-amount, 20px)) !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; +} + +/* ============================================= */ +/* LIQUID BLUE THEME - FUTURISTIC AI STYLING */ +/* ============================================= */ + +/* Main glass container with blue tint */ +[data-theme="liquid-blue"] main::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 255, 255, 0.08); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + border-radius: 0; + z-index: 0; + box-shadow: + 0 0 20px rgba(0, 255, 255, 0.2), + 0 0 40px rgba(0, 255, 170, 0.15), + inset 0 2px 3px rgba(0, 255, 255, 0.15), + inset 0 -2px 3px rgba(0, 0, 0, 0.1), + 0 12px 40px rgba(0, 0, 0, 0.15); +} + +/* Animated blue jelly border */ +[data-theme="liquid-blue"] main::after { + content: ''; + position: absolute; + top: -3px; + left: -3px; + right: -3px; + bottom: -3px; + background: linear-gradient( + 45deg, + rgba(0, 122, 255, 0.25), + rgba(6, 182, 212, 0.25), + rgba(0, 212, 255, 0.25), + rgba(0, 122, 255, 0.25) + ); + background-size: 300% 300%; + border-radius: 0; + z-index: -1; + filter: blur(6px); + opacity: 0.7; + animation: liquid-blue-jelly 12s ease-in-out infinite; +} + +/* Disable animation when motion setting is enabled */ +[data-theme="liquid-blue"][data-disable-motion="true"] main::after { + animation: none; +} + +@keyframes liquid-blue-jelly { + 0%, 100% { + background-position: 0% 50%; + } + 25% { + background-position: 50% 25%; + } + 50% { + background-position: 100% 50%; + } + 75% { + background-position: 50% 75%; + } +} + +/* Ensure main content is above glass effects */ +[data-theme="liquid-blue"] main > * { + position: relative; + z-index: 1; +} + +/* Liquid Blue Theme - Navigation Sidebar */ +[data-theme="liquid-blue"] .menu a[class*="bg-base-300"] { + background: rgba(0, 255, 255, 0.15) !important; + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border: 1px solid rgba(0, 255, 255, 0.2); + color: white !important; + box-shadow: + inset 0 1px 2px rgba(0, 255, 255, 0.2), + 0 2px 8px rgba(0, 0, 0, 0.1); +} + +[data-theme="liquid-blue"] .menu a[class*="bg-base-300"]:hover { + background: rgba(0, 255, 255, 0.2) !important; + border-color: rgba(0, 255, 255, 0.3); +} + +[data-theme="liquid-blue"] .menu a:not([class*="bg-base-300"]):hover { + background: rgba(0, 255, 255, 0.08); + border: 1px solid rgba(0, 255, 255, 0.15); + color: rgba(255, 255, 255, 0.9); +} + +[data-theme="liquid-blue"] .menu a svg, +[data-theme="liquid-blue"] .menu a .w-6.h-6 { + color: currentColor !important; +} + +[data-theme="liquid-blue"] .menu a[class*="bg-base-300"] svg, +[data-theme="liquid-blue"] .menu a[class*="bg-base-300"] .w-6.h-6 { + color: white !important; +} + +[data-theme="liquid-blue"] .menu a:not([class*="bg-base-300"]) svg, +[data-theme="liquid-blue"] .menu a:not([class*="bg-base-300"]) .w-6.h-6 { + color: rgba(255, 255, 255, 0.75) !important; +} + +[data-theme="liquid-blue"] .menu a:not([class*="bg-base-300"]):hover svg, +[data-theme="liquid-blue"] .menu a:not([class*="bg-base-300"]):hover .w-6.h-6 { + color: rgba(255, 255, 255, 0.9) !important; +} + +[data-theme="liquid-blue"] .menu a span[class*="text-white"] { + color: white !important; +} + +[data-theme="liquid-blue"] .menu a span[class*="text-base-content/75"] { + color: rgba(255, 255, 255, 0.75) !important; +} + +[data-theme="liquid-blue"] .menu a:hover span[class*="text-base-content"] { + color: rgba(255, 255, 255, 0.9) !important; +} + +/* Top blue highlight */ +[data-theme="liquid-blue"] main > div:first-child::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 120px; + background: linear-gradient( + to bottom, + rgba(0, 255, 255, 0.15) 0%, + rgba(0, 255, 170, 0.08) 30%, + transparent 100% + ); + pointer-events: none; + z-index: 2; + border-radius: 0; +} + +/* Remove borders between feed and right nav */ +[data-theme="liquid-blue"] .w-1\/3.block .bg-base-200, +[data-theme="liquid-blue"] .w-full.sticky .bg-base-200 { + background: transparent !important; + border: none !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; +} + +/* Make feed area transparent */ +[data-theme="liquid-blue"] main > div:first-child { + background: transparent !important; +} + +/* Make right column transparent */ +[data-theme="liquid-blue"] .w-1\/3.block { + background: transparent !important; +} + +/* Add bevel effect to right column in liquid glass theme */ +[data-theme="liquid-glass"] .w-1\/3.block { + position: sticky !important; + top: 0 !important; + background: transparent !important; + backdrop-filter: blur(16px) !important; + -webkit-backdrop-filter: blur(16px) !important; + border-left: 0.5px solid rgba(255, 255, 255, 0.08) !important; + border-radius: 16px 0 0 0 !important; + box-shadow: + inset 0 2px 3px rgba(255, 255, 255, 0.2) !important; +} + +/* Add bevel effect to right column in liquid blue theme */ +[data-theme="liquid-blue"] .w-1\/3.block { + position: sticky !important; + top: 0 !important; + background: transparent !important; + backdrop-filter: blur(16px) !important; + -webkit-backdrop-filter: blur(16px) !important; + border-left: 1px solid rgba(0, 255, 255, 0.2) !important; + border-radius: 16px 0 0 0 !important; + box-shadow: + inset 0 2px 3px rgba(0, 255, 255, 0.15) !important; +} + +/* Liquid Blue Button Styles */ +[data-theme="liquid-blue"] .btn { + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid rgba(0, 255, 255, 0.2); + background: rgba(0, 255, 255, 0.08); + color: white; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +[data-theme="liquid-blue"] .btn:hover { + border-color: rgba(0, 255, 255, 0.4); + background: rgba(0, 255, 255, 0.12); + transform: translateY(-1px); +} + +[data-theme="liquid-blue"] .btn-primary { + background: linear-gradient(135deg, var(--primary), var(--secondary)) !important; + border: none !important; + color: white !important; + box-shadow: 0 8px 24px rgba(0, 255, 255, 0.3); +} + +[data-theme="liquid-blue"] .btn-primary:hover { + box-shadow: 0 12px 32px rgba(0, 255, 255, 0.4); + opacity: 1 !important; +} + +/* Liquid Blue Theme - Home Feed Textarea Icons Hover Effects */ +[data-theme="liquid-blue"] .HomeFeedTextarea-container [class*="hover:text-primary"]:hover { + color: rgba(0, 255, 255, 0.9) !important; +} + +[data-theme="liquid-blue"] .HomeFeedTextarea-container svg:hover { + color: rgba(0, 255, 255, 0.9) !important; +} + +[data-theme="liquid-blue"] .HomeFeedTextarea-container button:hover svg { + color: rgba(0, 255, 255, 0.9) !important; +} + +/* Liquid Blue Input Styles */ +[data-theme="liquid-blue"] .input, +[data-theme="liquid-blue"] .select, +[data-theme="liquid-blue"] .textarea { + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid rgba(0, 122, 255, 0.2); + background: rgba(0, 122, 255, 0.06) !important; + color: white; +} + +[data-theme="liquid-blue"] .input:focus, +[data-theme="liquid-blue"] .select:focus, +[data-theme="liquid-blue"] .textarea:focus { + border-color: rgba(0, 255, 255, 0.6); + background: rgba(0, 122, 255, 0.08) !important; + outline: none; + box-shadow: 0 0 20px rgba(0, 122, 255, 0.3); +} + +/* Liquid Blue Modal Styles */ +[data-theme="liquid-blue"] .modal-box { + backdrop-filter: blur(24px); + -webkit-backdrop-filter: blur(24px); + border: 1px solid rgba(0, 255, 255, 0.2); + background: rgba(0, 122, 255, 0.08) !important; + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.3); +} + +/* Liquid Blue Card Styles */ +[data-theme="liquid-blue"] .card { + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid rgba(0, 122, 255, 0.2); + background: rgba(0, 122, 255, 0.03) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +[data-theme="liquid-blue"] .card:hover { + border-color: rgba(0, 122, 255, 0.4); + transform: translateY(-4px); + box-shadow: 0 16px 32px rgba(0, 0, 0, 0.2); +} + +/* Liquid Blue Tab Styles */ +[data-theme="liquid-blue"] .tab { + color: rgba(255, 255, 255, 0.7); + transition: all 0.3s ease; +} + +[data-theme="liquid-blue"] .tab.tab-active { + color: white; + background: rgba(0, 122, 255, 0.1); + border-radius: 8px; +} + +/* Feed item glass effect */ +[data-theme="liquid-blue"] .feed-item, +[data-theme="liquid-blue"] article:not(.profile-bio-article) { + background: rgba(0, 122, 255, 0.02); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: 1px solid rgba(0, 122, 255, 0.08); + transition: all 0.3s ease; +} + +[data-theme="liquid-blue"] .feed-item:hover, +[data-theme="liquid-blue"] article:not(.profile-bio-article):hover { + background: rgba(0, 122, 255, 0.04); + border-color: rgba(0, 122, 255, 0.15); + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); +} + +/* Liquid Blue Sidebar Glass Effects */ +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end { + position: relative; + isolation: isolate; +} + +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end::before { + content: ''; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(0, 255, 255, 0.08); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + border-radius: 0 16px 0 0; + z-index: -1; + box-shadow: + 0 0 20px rgba(0, 255, 255, 0.2), + 0 0 40px rgba(0, 255, 170, 0.15), + inset 0 2px 3px rgba(0, 255, 255, 0.15), + inset 0 -2px 3px rgba(0, 0, 0, 0.1), + 0 12px 40px rgba(0, 0, 0, 0.15); + pointer-events: none; +} + +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end::after { + content: ''; + position: absolute; + top: -3px; + left: -3px; + bottom: -3px; + right: -3px; + background: linear-gradient( + 45deg, + rgba(0, 122, 255, 0.25), + rgba(0, 165, 255, 0.25), + rgba(0, 136, 255, 0.25), + rgba(0, 122, 255, 0.25) + ); + background-size: 300% 300%; + border-radius: 0 19px 0 0; + z-index: -2; + filter: blur(6px); + opacity: 0.7; + animation: liquid-blue-jelly 12s ease-in-out infinite; + pointer-events: none; +} + +/* Disable animation when motion setting is enabled */ +[data-theme="liquid-blue"][data-disable-motion="true"] .flex.flex-col.h-full.self-end::after { + animation: none; +} + +/* Sidebar glass highlight */ +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end > div:first-child::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 120px; + background: linear-gradient( + to bottom, + rgba(0, 255, 255, 0.12) 0%, + rgba(0, 255, 170, 0.05) 30%, + transparent 100% + ); + border-radius: 0 16px 0 0; + pointer-events: none; + z-index: 2; +} + +/* Ensure content is above glass effects */ +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end > * { + position: relative; + z-index: 1; +} + +/* Fix left sidebar positioning - prevent overflow issues */ +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end { + overflow: hidden; + contain: layout style paint; + /* Make sidebar fill full viewport height to eliminate black gap */ + min-height: 100vh; + height: 100vh; +} + +/* Prevent glass pseudo-elements from extending beyond sidebar bounds */ +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end::before, +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end::after { + contain: layout style paint; + overflow: hidden; +} + +/* Adjust opacity of glass background for better visibility */ +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end::before { + background: rgba(0, 255, 255, 0.10) !important; /* Enhanced transparency */ +} + +/* Ensure glass effects don't affect document flow */ +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end::before, +[data-theme="liquid-blue"] .flex.flex-col.h-full.self-end::after { + position: absolute; + pointer-events: none; +} + +/* Ensure glass effects don't cause scrollbars */ +[data-theme="liquid-blue"] *::before, +[data-theme="liquid-blue"] *::after { + box-sizing: border-box; + max-width: 100%; + max-height: 100%; +} + +/* Style SideBarToolBar buttons */ +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 button, +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 a, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 a { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + border: none !important; + color: rgba(255, 255, 255, 0.8) !important; + transition: box-shadow 0.2s ease !important; +} + +/* SideBarToolBar glass effect on icons */ +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 svg, +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 a svg, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 svg, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 a svg { + opacity: 0.95; + filter: drop-shadow(0 0 6px rgba(0, 255, 255, 0.4)) blur(0.5px); + transition: all 0.3s ease; +} + +/* SideBarToolBar hover effects - cyan icon glow */ +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 button:hover svg, +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 a:hover svg, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:hover svg, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 a:hover svg { + opacity: 1; + filter: drop-shadow(0 0 8px rgba(0, 255, 255, 0.6)) drop-shadow(0 0 12px rgba(0, 255, 170, 0.5)) blur(0.5px) !important; +} + +/* FEEDS BUTTON ONLY (3rd position in 2x2 grid) - conjoined cyan glow system */ +/* When hovering over Feeds icon - glow both icon and text */ +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 button:nth-child(3):has(svg:hover) svg, +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 button:nth-child(3):has(svg:hover) span, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:nth-child(3):has(svg:hover) svg, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:nth-child(3):has(svg:hover) span { + filter: drop-shadow(0 0 12px rgba(0, 255, 255, 0.8)) drop-shadow(0 0 18px rgba(0, 255, 170, 0.7)) drop-shadow(0 0 24px rgba(0, 255, 255, 0.6)) !important; +} + +/* When hovering over Feeds text - glow both text and icon */ +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 button:nth-child(3):has(span:hover) svg, +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 button:nth-child(3):has(span:hover) span, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:nth-child(3):has(span:hover) svg, +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:nth-child(3):has(span:hover) span { + filter: drop-shadow(0 0 12px rgba(0, 255, 255, 0.8)) drop-shadow(0 0 18px rgba(0, 255, 170, 0.7)) drop-shadow(0 0 24px rgba(0, 255, 255, 0.6)) !important; +} + +/* NEW POST BUTTON ONLY - conjoined cyan glow system */ +/* When hovering over new post icon - glow both icon and text */ +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 button:has(div[class*="rounded-md"]:hover) div[class*="rounded-md"], +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:has(div[class*="rounded-md"]:hover) div[class*="rounded-md"] { + box-shadow: 0 0 8px rgba(0, 255, 255, 0.6), 0 0 12px rgba(0, 255, 170, 0.5), 0 0 16px rgba(0, 255, 255, 0.4) !important; +} + +/* When hovering over new post text - glow both text and icon */ +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 button:has(span:hover) div[class*="rounded-md"], +[data-theme="liquid-blue"] .grid.grid-flow-col.grid-rows-2.grid-cols-2 button:has(span:hover) div[class*="rounded-md"] { + box-shadow: 0 0 8px rgba(0, 255, 255, 0.6), 0 0 12px rgba(0, 255, 170, 0.5), 0 0 16px rgba(0, 255, 255, 0.4) !important; +} + +/* Hover and active states removed */ + +/* Active/selected state highlight removed */ + +/* Make SideBarToolBar background transparent */ +[data-theme="liquid-blue"] .flex.items-center.justify-center.h-1\/6 { + background: transparent !important; +} + +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-2.p-2 { + background: transparent !important; +} + +/* Ensure proper vertical alignment of containers */ +[data-theme="liquid-blue"] .flex.relative.min-h-\[calc\(100vh-6em\)\] { + align-items: stretch !important; +} + +/* Align both containers to start at the same position */ +[data-theme="liquid-blue"] .flex.relative.min-h-\[calc\(100vh-6em\)\] > * { + align-self: stretch !important; +} + +/* Fix right column spacing */ +[data-theme="liquid-blue"] .border-l.border-\[var\(--border-color\)\].mt-\[4em\] { + margin-top: 4em !important; + background: transparent !important; + border-color: rgba(0, 255, 255, 0.08) !important; +} + +/* Enhanced HomeFeedTextarea glow for liquid blue theme */ +[data-theme="liquid-blue"] .HomeFeedTextarea-container:focus-within { + ring-color: rgba(0, 255, 255, 0.4) !important; + box-shadow: 0 0 0 2px rgba(0, 255, 255, 0.4), 0 0 20px rgba(0, 255, 255, 0.3) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +/* Enhanced SearchBox effects for liquid blue theme */ +[data-theme="liquid-blue"] .dropdown-content.menu { + background: linear-gradient(135deg, rgba(0, 255, 255, 0.12) 0%, rgba(0, 255, 255, 0.08) 100%) !important; + backdrop-filter: blur(20px) !important; + -webkit-backdrop-filter: blur(20px) !important; + border: 1px solid rgba(0, 255, 255, 0.3) !important; + box-shadow: + 0 8px 32px rgba(0, 255, 255, 0.15), + 0 0 0 1px rgba(255, 255, 255, 0.1), + inset 0 1px 0 rgba(255, 255, 255, 0.2) !important; +} + +[data-theme="liquid-blue"] input:focus { + ring-color: rgba(0, 255, 255, 0.6) !important; + box-shadow: + 0 0 0 2px rgba(0, 255, 255, 0.6), + 0 0 25px rgba(0, 255, 255, 0.4), + 0 0 50px rgba(0, 255, 255, 0.2) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +/* Enhanced search mode buttons for liquid blue theme */ +[data-theme="liquid-blue"] .dropdown-content.menu button { + background: rgba(0, 255, 255, 0.08) !important; + border: 1px solid rgba(0, 255, 255, 0.25) !important; + color: rgba(0, 255, 255, 0.9) !important; + backdrop-filter: blur(10px) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +[data-theme="liquid-blue"] .dropdown-content.menu button:hover { + background: rgba(0, 255, 255, 0.15) !important; + border-color: rgba(0, 255, 255, 0.4) !important; + color: rgba(0, 255, 255, 1) !important; + box-shadow: 0 0 15px rgba(0, 255, 255, 0.4) !important; + transform: translateY(-1px) !important; +} + +/* Liquid Blue Theme - Search dropdown item hover effects */ +[data-theme="liquid-blue"] .dropdown-content.menu [class*="cursor-pointer"]:hover, +[data-theme="liquid-blue"] .dropdown-content.menu div[class*="flex"][class*="items-center"]:hover { + background: rgba(0, 255, 255, 0.08) !important; +} + +/* Liquid Blue Theme - Search mode button hover effects */ +[data-theme="liquid-blue"] .dropdown-content.menu button[class*="thread-dropdown-btn"]:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.15) !important; +} + + +/* Enhanced dropdown caret for liquid blue theme - only in MiddleHeader context */ +[data-theme="liquid-blue"] header div[class*="justify-center"] svg.MuiSvgIcon-root { + color: rgba(255, 255, 255, 0.7) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +/* Blue on hover over the specific clickable area (title + caret container) */ +[data-theme="liquid-blue"] header div[class*="justify-center"]:hover svg.MuiSvgIcon-root { + color: rgba(0, 255, 255, 0.9) !important; + filter: drop-shadow(0 0 3px rgba(0, 255, 255, 0.4)) !important; +} + +/* Enhanced feed tabs dropdown for liquid blue theme */ +[data-theme="liquid-blue"] header div.absolute.top-full.left-1\/2.transform.-translate-x-1\/2.mt-1.py-2.bg-base-200.rounded-lg.shadow-lg.min-w-\[120px\].z-50 { + background: linear-gradient(135deg, rgba(0, 255, 255, 0.18) 0%, rgba(0, 255, 255, 0.12) 100%) !important; + backdrop-filter: blur(20px) !important; + -webkit-backdrop-filter: blur(20px) !important; + border: 1px solid rgba(0, 255, 255, 0.35) !important; + box-shadow: + 0 8px 32px rgba(0, 255, 255, 0.2), + 0 0 0 1px rgba(255, 255, 255, 0.15), + inset 0 1px 0 rgba(255, 255, 255, 0.2) !important; +} + +[data-theme="liquid-blue"] header div.absolute.top-full.left-1\/2.transform.-translate-x-1\/2.mt-1.py-2.bg-base-200.rounded-lg.shadow-lg.min-w-\[120px\].z-50 button { + color: rgba(255, 255, 255, 1) !important; + backdrop-filter: blur(10px) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +[data-theme="liquid-blue"] header div.absolute.top-full.left-1\/2.transform.-translate-x-1\/2.mt-1.py-2.bg-base-200.rounded-lg.shadow-lg.min-w-\[120px\].z-50 button:hover { + background: rgba(0, 255, 255, 0.2) !important; + color: white !important; + box-shadow: 0 0 15px rgba(0, 255, 255, 0.4) !important; + transform: translateY(-1px) !important; +} + +/* Liquid Glass Theme - Enhanced Glass Effects */ +/* Enhanced SearchBox effects for liquid glass theme */ +[data-theme="liquid-glass"] .dropdown-content.menu { + background: linear-gradient(135deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0.06) 100%) !important; + backdrop-filter: blur(25px) !important; + -webkit-backdrop-filter: blur(25px) !important; + border: 1px solid rgba(255, 255, 255, 0.2) !important; + box-shadow: + 0 8px 32px rgba(0, 0, 0, 0.15), + 0 0 0 1px rgba(255, 255, 255, 0.15), + inset 0 1px 0 rgba(255, 255, 255, 0.3) !important; +} + +/* Liquid Glass Theme - Search dropdown item hover effects */ +[data-theme="liquid-glass"] .dropdown-content.menu [class*="cursor-pointer"]:hover, +[data-theme="liquid-glass"] .dropdown-content.menu div[class*="flex"][class*="items-center"]:hover { + background: rgba(255, 255, 255, 0.08) !important; +} + +/* Liquid Glass Theme - Search mode button hover effects */ +[data-theme="liquid-glass"] .dropdown-content.menu button[class*="px-3 py-1"]:hover, +[data-theme="liquid-glass"] .dropdown-content.menu button[class*="thread-dropdown-btn"]:hover { + background: rgba(255, 255, 255, 0.08) !important; + border-color: rgba(255, 255, 255, 0.1) !important; +} + +[data-theme="liquid-glass"] input:focus { + ring-color: rgba(255, 255, 255, 0.5) !important; + box-shadow: + 0 0 0 2px rgba(255, 255, 255, 0.5), + 0 0 25px rgba(255, 255, 255, 0.4), + 0 0 50px rgba(255, 255, 255, 0.3) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +/* Enhanced search mode buttons for liquid glass theme */ +[data-theme="liquid-glass"] .dropdown-content.menu button { + background: rgba(255, 255, 255, 0.08) !important; + border: 1px solid rgba(255, 255, 255, 0.2) !important; + color: rgba(255, 255, 255, 0.9) !important; + backdrop-filter: blur(10px) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +[data-theme="liquid-glass"] .dropdown-content.menu button:hover { + background: rgba(255, 255, 255, 0.15) !important; + border-color: rgba(255, 255, 255, 0.3) !important; + color: rgba(255, 255, 255, 1) !important; + box-shadow: 0 0 15px rgba(255, 255, 255, 0.4) !important; + transform: translateY(-1px) !important; +} + +[data-theme="liquid-glass"] .dropdown-content.menu button.bg-primary { + background: linear-gradient(135deg, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.8) 100%) !important; + border-color: rgba(255, 255, 255, 1) !important; + color: rgba(0, 0, 0, 0.8) !important; + box-shadow: 0 0 20px rgba(255, 255, 255, 0.5) !important; +} + +/* Enhanced dropdown caret for liquid glass theme */ +[data-theme="liquid-glass"] header div[class*="justify-center"] svg.MuiSvgIcon-root { + color: rgba(255, 255, 255, 0.7) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +/* Remove any glow effects from SubPageSearchBar dropdown */ +.absolute.mt-2.w-full.bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border input, +.absolute.mt-2.w-full.bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border, +.absolute.mt-2.w-full.bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border * { + box-shadow: none !important; + filter: none !important; + text-shadow: none !important; +} + +/* SubPageSearchBar dropdown glass effects */ +[data-theme="liquid-glass"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] { + background: linear-gradient(135deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0.06) 100%) !important; + backdrop-filter: blur(20px) !important; + -webkit-backdrop-filter: blur(20px) !important; + border: 1px solid rgba(255, 255, 255, 0.2) !important; + box-shadow: + 0 8px 32px rgba(0, 0, 0, 0.15), + 0 0 0 1px rgba(255, 255, 255, 0.15), + inset 0 1px 0 rgba(255, 255, 255, 0.3) !important; +} + +[data-theme="liquid-blue"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] { + background: linear-gradient(135deg, rgba(0, 255, 255, 0.12) 0%, rgba(0, 255, 255, 0.08) 100%) !important; + backdrop-filter: blur(20px) !important; + -webkit-backdrop-filter: blur(20px) !important; + border: 1px solid rgba(0, 255, 255, 0.3) !important; + box-shadow: + 0 8px 32px rgba(0, 255, 255, 0.2), + 0 0 0 1px rgba(255, 255, 255, 0.15), + inset 0 1px 0 rgba(0, 255, 255, 0.2) !important; +} + +/* Dark theme SubPageSearchBar dropdown */ +[data-theme="dark"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] { + background: linear-gradient(135deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.04) 100%) !important; + backdrop-filter: blur(15px) !important; + -webkit-backdrop-filter: blur(15px) !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; + box-shadow: + 0 6px 24px rgba(0, 0, 0, 0.2), + 0 0 0 1px rgba(255, 255, 255, 0.1), + inset 0 1px 0 rgba(255, 255, 255, 0.2) !important; +} + +/* Dim theme SubPageSearchBar dropdown */ +[data-theme="dim"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] { + background: linear-gradient(135deg, rgba(255, 255, 255, 0.06) 0%, rgba(255, 255, 255, 0.03) 100%) !important; + backdrop-filter: blur(12px) !important; + -webkit-backdrop-filter: blur(12px) !important; + border: 1px solid rgba(255, 255, 255, 0.08) !important; + box-shadow: + 0 4px 16px rgba(0, 0, 0, 0.15), + 0 0 0 1px rgba(255, 255, 255, 0.08), + inset 0 1px 0 rgba(255, 255, 255, 0.15) !important; +} + +/* Blue theme SubPageSearchBar dropdown */ +[data-theme="light"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] { + background: linear-gradient(135deg, rgba(0, 0, 0, 0.08) 0%, rgba(0, 0, 0, 0.04) 100%) !important; + backdrop-filter: blur(15px) !important; + -webkit-backdrop-filter: blur(15px) !important; + border: 1px solid rgba(0, 0, 0, 0.12) !important; + box-shadow: + 0 6px 24px rgba(0, 0, 0, 0.1), + 0 0 0 1px rgba(0, 0, 0, 0.08), + inset 0 1px 0 rgba(255, 255, 255, 0.4) !important; +} + +/* Enhanced clickable time frame buttons in search dropdown */ +.bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"] { + border: 1px solid rgba(0, 0, 0, 0.12) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; + cursor: pointer !important; + font-weight: 500 !important; +} + +/* Hover state for time frame buttons */ +.bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"]:hover { + border-color: rgba(0, 0, 0, 0.25) !important; + transform: translateY(-1px) !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; +} + +/* Selected state for time frame buttons */ +.bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="bg-[#00FFFF]"] { + border-color: rgba(0, 255, 255, 0.6) !important; + box-shadow: 0 0 10px rgba(0, 255, 255, 0.2) !important; +} + +/* Theme-specific time frame button styling */ +[data-theme="liquid-glass"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"] { + border-color: rgba(255, 255, 255, 0.15) !important; +} + +[data-theme="liquid-glass"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"]:hover { + border-color: rgba(255, 255, 255, 0.25) !important; + box-shadow: 0 2px 8px rgba(255, 255, 255, 0.1) !important; +} + +[data-theme="liquid-glass"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="bg-[#00FFFF]"] { + border-color: rgba(255, 255, 255, 0.3) !important; + box-shadow: 0 0 8px rgba(255, 255, 255, 0.15) !important; +} + +[data-theme="liquid-blue"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"] { + border-color: rgba(0, 255, 255, 0.15) !important; +} + +[data-theme="liquid-blue"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"]:hover { + border-color: rgba(0, 255, 255, 0.25) !important; + box-shadow: 0 2px 8px rgba(0, 255, 255, 0.1) !important; +} + +[data-theme="dark"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"] { + border-color: rgba(255, 255, 255, 0.15) !important; +} + +[data-theme="dark"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"]:hover { + border-color: rgba(255, 255, 255, 0.25) !important; + box-shadow: 0 2px 8px rgba(255, 255, 255, 0.08) !important; +} + +[data-theme="dim"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"] { + border-color: rgba(255, 255, 255, 0.12) !important; +} + +[data-theme="dim"] .bg-base-300.rounded-lg.shadow-lg.z-10.p-3.border.border-\[var\(--border-color\)\] button[class*="px-3 py-1 rounded-full text-sm"]:hover { + border-color: rgba(255, 255, 255, 0.2) !important; + box-shadow: 0 2px 8px rgba(255, 255, 255, 0.06) !important; +} + +[data-theme="liquid-glass"] header div[class*="justify-center"]:hover svg.MuiSvgIcon-root { + color: rgba(255, 255, 255, 0.9) !important; + filter: drop-shadow(0 0 3px rgba(255, 255, 255, 0.5)) !important; +} + +/* Enhanced feed tabs dropdown for liquid glass theme - Purple Glass Effect */ +[data-theme="liquid-glass"] header div.absolute.top-full.left-1\/2.transform.-translate-x-1\/2.mt-1.py-2.bg-base-200.rounded-lg.shadow-lg.min-w-\[120px\].z-50 { + background: linear-gradient(135deg, rgba(168, 85, 247, 0.25) 0%, rgba(147, 51, 234, 0.2) 100%) !important; + backdrop-filter: blur(25px) !important; + -webkit-backdrop-filter: blur(25px) !important; + border: 1px solid rgba(168, 85, 247, 0.4) !important; + box-shadow: + 0 12px 40px rgba(147, 51, 234, 0.25), + 0 0 0 1px rgba(255, 255, 255, 0.15), + inset 0 1px 0 rgba(255, 255, 255, 0.25) !important; + border-radius: 12px !important; +} + +[data-theme="liquid-glass"] header div.absolute.top-full.left-1\/2.transform.-translate-x-1\/2.mt-1.py-2.bg-base-200.rounded-lg.shadow-lg.min-w-\[120px\].z-50 button { + color: rgba(255, 255, 255, 1) !important; + backdrop-filter: blur(10px) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; + border-radius: 8px !important; + font-weight: 600 !important; + letter-spacing: 0.025em !important; +} + +[data-theme="liquid-glass"] header div.absolute.top-full.left-1\/2.transform.-translate-x-1\/2.mt-1.py-2.bg-base-200.rounded-lg.shadow-lg.min-w-\[120px\].z-50 button:hover { + background: rgba(168, 85, 247, 0.3) !important; + color: white !important; + box-shadow: 0 0 20px rgba(168, 85, 247, 0.5) !important; + transform: translateY(-2px) !important; + border: 1px solid rgba(168, 85, 247, 0.5) !important; +} + +/* Active/selected button state for liquid glass theme */ +[data-theme="liquid-glass"] header div.absolute.top-full.left-1\/2.transform.-translate-x-1\/2.mt-1.py-2.bg-base-200.rounded-lg.shadow-lg.min-w-\[120px\].z-50 button.active { + background: linear-gradient(135deg, rgba(168, 85, 247, 0.5) 0%, rgba(147, 51, 234, 0.4) 100%) !important; + color: white !important; + box-shadow: 0 0 25px rgba(168, 85, 247, 0.6) !important; + border: 1px solid rgba(168, 85, 247, 0.6) !important; +} + +/* Enhanced feed tabs dropdown for liquid blue theme */ +[data-theme="liquid-blue"] header div.absolute.top-full { + background: linear-gradient(135deg, rgba(0, 255, 255, 0.18) 0%, rgba(0, 255, 255, 0.12) 100%) !important; + backdrop-filter: blur(20px) !important; + -webkit-backdrop-filter: blur(20px) !important; + border: 1px solid rgba(0, 255, 255, 0.35) !important; + box-shadow: + 0 8px 32px rgba(0, 255, 255, 0.2), + 0 0 0 1px rgba(255, 255, 255, 0.15), + inset 0 1px 0 rgba(255, 255, 255, 0.2) !important; +} + +[data-theme="liquid-blue"] header div.absolute.top-full button { + color: rgba(255, 255, 255, 1) !important; + backdrop-filter: blur(10px) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +[data-theme="liquid-blue"] header div.absolute.top-full button:hover { + background: rgba(0, 255, 255, 0.2) !important; + color: white !important; + box-shadow: 0 0 15px rgba(0, 255, 255, 0.4) !important; + transform: translateY(-1px) !important; +} + + +/* ============================================= */ +/* RELAY SETTINGS - LIQUID GLASS THEME APPLICATION */ +/* ============================================= */ + +/* Apply liquid glass theme to all relay settings buttons */ +[data-theme="liquid-glass"] .relay-settings-button, +[data-theme="liquid-glass"] button.btn, +[data-theme="liquid-glass"] .ant-btn { + background: rgba(255, 255, 255, 0.08) !important; + backdrop-filter: blur(10px) !important; + -webkit-backdrop-filter: blur(10px) !important; + border: 1px solid rgba(255, 255, 255, 0.15) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + + &:hover { + background: rgba(255, 255, 255, 0.12) !important; + border-color: rgba(255, 255, 255, 0.2) !important; + transform: translateY(-1px); + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); + } +} + +/* Liquid Glass Theme - Switch/Toggle Components in Relay Settings */ +[data-theme="liquid-glass"] .ant-switch, +[data-theme="liquid-glass"] .ant-switch-checked { + background: rgba(138, 43, 226, 0.2) !important; /* Purple tint */ + + &.ant-switch-checked { + background: linear-gradient(135deg, rgba(138, 43, 226, 0.6), rgba(33, 150, 243, 0.5)) !important; + box-shadow: 0 0 8px rgba(138, 43, 226, 0.4); + } +} + +/* Liquid Glass Theme - Input fields and selects in relay settings */ +[data-theme="liquid-glass"] .ant-input, +[data-theme="liquid-glass"] .ant-select-selector, +[data-theme="liquid-glass"] .ant-select-selection-item, +[data-theme="liquid-glass"] textarea.ant-input { + background: rgba(255, 255, 255, 0.06) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; + color: rgba(255, 255, 255, 0.95) !important; + + &:hover { + background: rgba(255, 255, 255, 0.08) !important; + border-color: rgba(255, 255, 255, 0.15) !important; + } + + &:focus, + &:focus-visible { + background: rgba(255, 255, 255, 0.12) !important; + border-color: rgba(255, 255, 255, 0.2) !important; + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.1) !important; + outline: none !important; + } +} + +/* Liquid Glass Theme - Dropdown/Select items in relay settings */ +[data-theme="liquid-glass"] .ant-select-dropdown, +[data-theme="liquid-glass"] .ant-dropdown-content { + background: rgba(255, 255, 255, 0.08) !important; + backdrop-filter: blur(16px) !important; + -webkit-backdrop-filter: blur(16px) !important; + border: 1px solid rgba(255, 255, 255, 0.15) !important; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); +} + +[data-theme="liquid-glass"] .ant-select-dropdown .ant-select-item, +[data-theme="liquid-glass"] .ant-dropdown-menu-item { + color: rgba(255, 255, 255, 0.9) !important; + + &:hover { + background: rgba(255, 255, 255, 0.1) !important; + } + + &.ant-select-item-option-selected, + &.ant-select-item-option-active { + background: rgba(138, 43, 226, 0.2) !important; + color: white !important; + } +} + +/* Liquid Glass Theme - Warning/Error elements in relay settings */ +[data-theme="liquid-glass"] .warning-container, +[data-theme="liquid-glass"] .error-message { + background: rgba(255, 77, 79, 0.05) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; + border: 1px solid rgba(255, 77, 79, 0.15) !important; + border-radius: 8px; + color: rgba(255, 77, 79, 0.9) !important; +} + +/* Liquid Glass Theme - Labels and text in relay settings */ +[data-theme="liquid-glass"] .relay-settings-label, +[data-theme="liquid-glass"] .setting-description, +[data-theme="liquid-glass"] h4, +[data-theme="liquid-glass"] p { + color: rgba(255, 255, 255, 0.9) !important; +} + +[data-theme="liquid-glass"] .setting-description, +[data-theme="liquid-glass"] p { + color: rgba(255, 255, 255, 0.75) !important; +} + +/* ============================================= */ +/* LIQUID BLUE - COMPONENT-BASED STYLING */ +/* ============================================= */ + +/* + * Color consistency is now handled directly in NavSideBar component + * using explicit RGBA values that match the liquid blue theme. + * These CSS overrides have been removed to prevent conflicts. + */ + +/* Button styles */ +[data-theme="liquid-glass"] .btn { + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.08); + color: white; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +[data-theme="liquid-glass"] .btn:hover { + border-color: rgba(255, 255, 255, 0.2); + background: rgba(255, 255, 255, 0.12); + transform: translateY(-2px); +} + +[data-theme="liquid-glass"] .btn-primary { + background: linear-gradient(135deg, var(--primary), var(--secondary)) !important; + border: none !important; + color: white !important; + box-shadow: 0 8px 24px rgba(0, 122, 255, 0.3); +} + +[data-theme="liquid-glass"] .btn-primary:hover { + box-shadow: 0 12px 32px rgba(0, 122, 255, 0.4); + opacity: 1 !important; +} + +[data-theme="liquid-glass"] .btn-neutral { + background: rgba(255, 255, 255, 0.06) !important; + color: white !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; +} + +[data-theme="liquid-glass"] .btn-neutral:hover { + background: rgba(255, 255, 255, 0.1) !important; + border-color: rgba(255, 255, 255, 0.2) !important; +} + +/* Input styles */ +[data-theme="liquid-glass"] .input, +[data-theme="liquid-glass"] .select, +[data-theme="liquid-glass"] .textarea { + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.06) !important; + color: white; +} + +[data-theme="liquid-glass"] .input:focus, +[data-theme="liquid-glass"] .select:focus, +[data-theme="liquid-glass"] .textarea:focus { + border-color: rgba(0, 122, 255, 0.5); + background: rgba(255, 255, 255, 0.08) !important; + outline: none; +} + +/* Modal styles */ +[data-theme="liquid-glass"] .modal-box { + backdrop-filter: blur(24px); + -webkit-backdrop-filter: blur(24px); + border: 1px solid rgba(255, 255, 255, 0.2); + background: rgba(255, 255, 255, 0.2) !important; + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.3); +} + +/* Card styles */ +[data-theme="liquid-glass"] .card { + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.03) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +[data-theme="liquid-glass"] .card:hover { + border-color: rgba(255, 255, 255, 0.2); + transform: translateY(-4px); + box-shadow: 0 16px 32px rgba(0, 0, 0, 0.2); +} + +/* Dropdown styles */ +[data-theme="liquid-glass"] .dropdown-content { + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + background: rgba(255, 255, 255, 0.08) !important; + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); +} + +/* Tab styles */ +[data-theme="liquid-glass"] .tab { + color: rgba(255, 255, 255, 0.7); + transition: all 0.3s ease; +} + +[data-theme="liquid-glass"] .tab.tab-active { + color: white; + background: rgba(255, 255, 255, 0.1); + border-radius: 8px; +} + +/* Badge styles */ +[data-theme="liquid-glass"] .badge { + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + background: rgba(255, 255, 255, 0.1) !important; + border: 1px solid rgba(255, 255, 255, 0.2); + color: white; +} + +/* Menu item styles */ +[data-theme="liquid-glass"] .menu li > a:hover, +[data-theme="liquid-glass"] .menu li > button:hover { + background: rgba(255, 255, 255, 0.08); + color: white; +} + +[data-theme="liquid-glass"] .menu li > a.active, +[data-theme="liquid-glass"] .menu li > button.active { + background: rgba(255, 255, 255, 0.12); + color: white; +} + +/* Avatar styles */ +[data-theme="liquid-glass"] .avatar { + border: 2px solid rgba(255, 255, 255, 0.2); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); +} + +/* Scrollbar styles for liquid glass theme */ +[data-theme="liquid-glass"] ::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +[data-theme="liquid-glass"] ::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.05); + border-radius: 5px; +} + +[data-theme="liquid-glass"] ::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.2); + border-radius: 5px; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +[data-theme="liquid-glass"] ::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.3); +} + +/* Feed item glass effect */ +[data-theme="liquid-glass"] .feed-item, +[data-theme="liquid-glass"] article:not(.profile-bio-article) { + background: rgba(255, 255, 255, 0.02); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.08); + transition: all 0.3s ease; +} + +[data-theme="liquid-glass"] .feed-item:hover, +[data-theme="liquid-glass"] article:not(.profile-bio-article):hover { + background: rgba(255, 255, 255, 0.04); + border-color: rgba(255, 255, 255, 0.12); + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); +} + +/* Remove article styling from profile bio */ +[data-theme="liquid-glass"] .flex.flex-col.gap-2.no-highlight article, +[data-theme="liquid-glass"] .profile-bio-article { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + border: none !important; + box-shadow: none !important; + transition: none !important; +} + +[data-theme="liquid-glass"] .flex.flex-col.gap-2.no-highlight article:hover, +[data-theme="liquid-glass"] .profile-bio-article:hover { + background: transparent !important; + transform: none !important; + box-shadow: none !important; + border: none !important; +} + +/* Tooltip styles */ +[data-theme="liquid-glass"] .tooltip::before { + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + background: rgba(255, 255, 255, 0.12) !important; + border: 1px solid rgba(255, 255, 255, 0.2); + color: white !important; +} + +/* Progress bar styles */ +[data-theme="liquid-glass"] .progress { + background: rgba(255, 255, 255, 0.1) !important; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +[data-theme="liquid-glass"] .progress::-webkit-progress-value { + background: linear-gradient(135deg, var(--primary), var(--secondary)); +} + +/* Toggle styles */ +[data-theme="liquid-glass"] .toggle { + background: rgba(255, 255, 255, 0.1) !important; + border: 1px solid rgba(255, 255, 255, 0.2); +} + +[data-theme="liquid-glass"] .toggle:checked { + background: linear-gradient(135deg, var(--primary), var(--secondary)) !important; + border-color: transparent; +} + +/* Divider styles */ +[data-theme="liquid-glass"] .divider { + color: rgba(255, 255, 255, 0.3); +} + +[data-theme="liquid-glass"] .divider::before, +[data-theme="liquid-glass"] .divider::after { + background: rgba(255, 255, 255, 0.1); +} + +/* NavSideBar item styling for liquid glass theme */ +[data-theme="liquid-glass"] .menu a[class*="bg-base-300"] { + background: rgba(255, 255, 255, 0.12) !important; + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.15); + color: white !important; + box-shadow: + inset 0 1px 2px rgba(255, 255, 255, 0.2), + 0 2px 8px rgba(0, 0, 0, 0.1); +} + +[data-theme="liquid-glass"] .menu a:not([class*="bg-base-300"]):hover { + background: rgba(255, 255, 255, 0.06); + border: 1px solid rgba(255, 255, 255, 0.08); + color: rgba(255, 255, 255, 0.9); +} + +/* Ensure proper icon colors in nav items */ +[data-theme="liquid-glass"] .menu a svg, +[data-theme="liquid-glass"] .menu a .w-6.h-6 { + color: currentColor !important; +} + +/* Style RightColumn sections for liquid glass */ +[data-theme="liquid-glass"] .section, +[data-theme="liquid-glass"] [class*="Section"] { + background: rgba(255, 255, 255, 0.03) !important; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; +} + +/* Ensure proper vertical alignment of containers */ +[data-theme="liquid-glass"] .flex.relative.min-h-\[calc\(100vh-6em\)\] { + align-items: stretch !important; +} + +/* Align both containers to start at the same position */ +[data-theme="liquid-glass"] .flex.relative.min-h-\[calc\(100vh-6em\)\] > * { + align-self: stretch !important; +} + +/* ============================================= */ +/* NOTIFICATION PAGE - MATCH MAIN FEED STYLE */ +/* ============================================= */ + +/* Remove special glass effects from notification page - let it be clean like main feed */ +[data-theme="liquid-glass"] section.flex.flex-1.w-full.justify-center { + background: transparent !important; +} + +/* Keep MiddleHeader's original frost effect */ +[data-theme="liquid-glass"] .hidden.cursor-pointer.md\:flex.sticky.top-\[2em\].h-\[4em\].z-40.w-full.bg-base-100.bg-opacity-80.backdrop-blur-sm { + border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important; +} + +/* ============================================= */ +/* MAINFEED TOP HEADER STRIP (White Frost Effect) */ +/* ============================================= */ +/* This creates a frosted white strip at the top of the MainFeed area only, + not affecting the sidebars or their content (Relay icons, Nestr logo) */ + +/* Apply frosted white strip only to MainFeed's top section */ +[data-theme="liquid-glass"] main::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 2rem; /* 32px - matches TitleBar height */ + + /* Frosted white glass effect matching Search page MiddleHeader */ + background: rgba(255, 255, 255, 0.08); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + + /* Visual definition */ + border-bottom: none; /* Removed border for seamless transition */ + box-shadow: + 0 2px 4px rgba(0, 0, 0, 0.05); /* Removed inset shadow to eliminate line */ + + /* Proper layering */ + z-index: 1; /* Above main background but below content */ + pointer-events: none; + border-radius: 16px 0 0 0; /* Top-left corner rounded for header strip */ +} + +/* Remove pseudo-elements that were adding extra glass effects */ + +/* Keep notification page content simple and clean */ +[data-theme="liquid-glass"] section.flex.flex-1.w-full.justify-center .flex.flex-col > div { + background: transparent !important; +} + +/* Make notification feed container transparent to avoid double blur */ +[data-theme="liquid-glass"] section.flex.flex-1.w-full.justify-center .overflow-y-scroll { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + border-color: rgba(255, 255, 255, 0.08) !important; + box-shadow: none !important; +} + +/* Style individual notification items with subtle effect to avoid excessive blur */ +[data-theme="liquid-glass"] .border-b.border-\[--border-color\].p-4 { + background: rgba(255, 255, 255, 0.01); + backdrop-filter: none; + -webkit-backdrop-filter: none; + border: 1px solid rgba(255, 255, 255, 0.05); + transition: all 0.3s ease; + margin-bottom: 8px; + border-radius: 8px; +} + +[data-theme="liquid-glass"] .border-b.border-\[--border-color\].p-4:hover { + background: rgba(255, 255, 255, 0.03); + border-color: rgba(255, 255, 255, 0.08); + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +/* Remove glass effect from notification filters section - keep it clean */ +[data-theme="liquid-glass"] .h-\[50vh\].min-h-\[300px\] { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + border: none !important; + box-shadow: none !important; +} + +/* Make notification RightColumn container transparent to avoid double blur */ +[data-theme="liquid-glass"] section.flex.flex-1.w-full.justify-center + div { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + border-left-color: rgba(255, 255, 255, 0.08) !important; +} + +/* Remove extra highlights to match main feed simplicity */ + +/* ============================================= */ +/* TITLEBAR STYLING FOR LIQUID GLASS THEME */ +/* ============================================= */ + +/* Make TitleBar completely transparent */ +[data-theme="liquid-glass"] .w-full.h-8.flex.items-center.bg-base-100.select-none.z-10.fixed.top-0.left-0.right-0 { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + border-bottom: none !important; + box-shadow: none !important; +} + +/* Style window control buttons with subtle glass effect */ +[data-theme="liquid-glass"] .w-full.h-8.flex.items-center.bg-base-100.select-none.z-10.fixed.top-0.left-0.right-0 button { + color: rgba(255, 255, 255, 0.9) !important; + transition: all 0.2s ease; + position: relative; + z-index: 1; +} + +/* Ensure draggable region and logo text stay above pseudo-elements */ +[data-theme="liquid-glass"] .w-full.h-8.flex.items-center.bg-base-100.select-none.z-10.fixed.top-0.left-0.right-0 > div { + position: relative; + z-index: 1; +} + +/* Hover states for window controls */ +[data-theme="liquid-glass"] .w-full.h-8.flex.items-center.bg-base-100.select-none.z-10.fixed.top-0.left-0.right-0 button:hover { + color: white !important; +} + +/* Minimize and Maximize button hover */ +[data-theme="liquid-glass"] .w-full.h-8.flex.items-center.bg-base-100.select-none.z-10.fixed.top-0.left-0.right-0 button.hover\:bg-base-300:hover { + background: rgba(255, 255, 255, 0.15) !important; +} + +/* Close button hover maintains red */ +[data-theme="liquid-glass"] .w-full.h-8.flex.items-center.bg-base-100.select-none.z-10.fixed.top-0.left-0.right-0 button.hover\:bg-red-500:hover { + background: rgba(239, 68, 68, 0.8) !important; + color: white !important; +} + +/* ============================================= */ +/* USER TOOLBAR LIQUID GLASS STYLING */ +/* ============================================= */ + +/* Apply consistent liquid glass styling to UserToolbar across all pages */ +[data-theme="liquid-glass"] .fixed.z-50.right-5 { + /* Ensure consistent positioning and appearance */ + background: transparent !important; +} + +/* Glass effect for UserToolbar on AI Assistant page */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 input, +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 .searchBox { + background: rgba(255, 255, 255, 0.06) !important; + backdrop-filter: blur(12px) !important; + -webkit-backdrop-filter: blur(12px) !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; +} + +/* Style the UserToolbar buttons on AI Assistant page */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 button.border { + background: rgba(255, 255, 255, 0.06) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; + border-color: rgba(255, 255, 255, 0.1) !important; +} + +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 button.border:hover { + background: rgba(255, 255, 255, 0.1) !important; + border-color: rgba(255, 255, 255, 0.2) !important; +} + +/* Style AIAssistantHeader buttons for liquid glass theme - more subtle, less frosty */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) header .btn { + /* Reduce glass effect, increase opacity for better visibility */ + opacity: 0.9 !important; + /* Only add subtle glass, don't override backgrounds */ + backdrop-filter: blur(2px) !important; + -webkit-backdrop-filter: blur(2px) !important; +} + +/* Ensure non-gradient buttons keep their original backgrounds */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) header .btn:not(.bg-gradient-to-r) { + background: inherit !important; +} + +[data-theme="liquid-glass"] body:has(.ai-assistant-container) header .btn:hover { + /* Keep original hover effects, just add subtle glass */ + backdrop-filter: blur(3px) !important; + -webkit-backdrop-filter: blur(3px) !important; + opacity: 1 !important; +} + +/* Ensure hover effects are preserved for all button types */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) header .btn:hover { + background: inherit !important; + border-color: inherit !important; +} + +[data-theme="liquid-glass"] body:has(.ai-assistant-container) header .btn.bg-gradient-to-r { + /* Remove all glass effects from gradient buttons to preserve original look */ + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + opacity: 1 !important; +} + +/* Restore rounded corners for AI Assistant header buttons */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) header .btn { + border-radius: 0.5rem !important; /* Restore rounded corners */ +} + +/* Ensure gradient buttons keep their rounded styling */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) header .btn.bg-gradient-to-r { + border-radius: 0.5rem !important; +} + +[data-theme="liquid-glass"] body:has(.ai-assistant-container) header .btn.bg-gradient-to-r:hover { + opacity: 0.9 !important; + box-shadow: 0 4px 12px rgba(0, 122, 255, 0.3) !important; + transform: translateY(-1px) !important; +} + +/* Remove any internal boxes or backgrounds from search inputs */ +.fixed.z-50.right-5 input, +.fixed.z-50.right-5 .searchBox, +.fixed.z-50.right-5 textarea, +.fixed.z-50.right-5 select { + /* Remove any internal pseudo-elements that might create boxes */ + background: transparent !important; + background-color: transparent !important; + background-image: none !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + box-shadow: none !important; + border: none !important; + outline: none !important; + /* Remove any padding that might create spacing for internal boxes */ + padding: 0 !important; + /* Remove any borders or spacing issues */ + margin: 0 !important; + /* Ensure the input itself is not creating the box effect */ + position: relative; +} + +/* Remove ALL background styling from UserToolbar search inputs - including focus states */ +.fixed.z-50.right-5 input, +.fixed.z-50.right-5 textarea, +.fixed.z-50.right-5 select, +.fixed.z-50.right-5 .searchBox input { + background: transparent !important; + background-color: transparent !important; + background-image: none !important; +} + +/* Override ALL input focus states that might show background color */ +.fixed.z-50.right-5 input:focus, +.fixed.z-50.right-5 input:focus-visible, +.fixed.z-50.right-5 input:active, +.fixed.z-50.right-5 input:hover, +.fixed.z-50.right-5 textarea:focus, +.fixed.z-50.right-5 textarea:focus-visible, +.fixed.z-50.right-5 select:focus, +.fixed.z-50.right-5 select:focus-visible, +.fixed.z-50.right-5 .searchBox input:focus, +.fixed.z-50.right-5 .searchBox input:focus-visible { + background: transparent !important; + background-color: transparent !important; + background-image: none !important; + outline: none !important; + box-shadow: none !important; +} + +/* Style the UserToolbar search box for liquid glass theme - only apply to the container */ +[data-theme="liquid-glass"] .fixed.z-50.right-5 .searchBox { + background: rgba(255, 255, 255, 0.06) !important; + backdrop-filter: blur(12px) !important; + -webkit-backdrop-filter: blur(12px) !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; + padding: 0.5rem 1rem !important; /* Restore appropriate padding */ +} + +/* Ensure the input itself inside the searchBox has no background */ +[data-theme="liquid-glass"] .fixed.z-50.right-5 .searchBox input { + background: transparent !important; + background-color: transparent !important; + border: none !important; + outline: none !important; + box-shadow: none !important; +} + +/* Style the UserToolbar buttons (wallet, notifications) */ +[data-theme="liquid-glass"] .fixed.z-50.right-5 button.border { + background: rgba(255, 255, 255, 0.06) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; + border-color: rgba(255, 255, 255, 0.1) !important; +} + +[data-theme="liquid-glass"] .fixed.z-50.right-5 button.border:hover { + background: rgba(255, 255, 255, 0.1) !important; + border-color: rgba(255, 255, 255, 0.2) !important; +} + +/* Fix UserToolbar positioning and appearance on AI Assistant page */ +/* The UserToolbar is rendered before ai-assistant-container, not after */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 { + /* Ensure the UserToolbar maintains consistent positioning */ + position: fixed !important; + z-index: 50 !important; + right: 1.25rem !important; + background: transparent !important; +} + +/* Ensure UserToolbar components have proper glass effect on AI Assistant page */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 input, +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 .searchBox { + background: rgba(255, 255, 255, 0.06) !important; + backdrop-filter: blur(12px) !important; + -webkit-backdrop-filter: blur(12px) !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; +} + +/* Style the UserToolbar buttons on AI Assistant page */ +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 button.border { + background: rgba(255, 255, 255, 0.06) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; + border-color: rgba(255, 255, 255, 0.1) !important; +} + +[data-theme="liquid-glass"] body:has(.ai-assistant-container) .fixed.z-50.right-5 button.border:hover { + background: rgba(255, 255, 255, 0.1) !important; + border-color: rgba(255, 255, 255, 0.2) !important; +} + +/* ============================================= */ +/* FEED SWITCHER WITH MODAL-STYLE GLASS EFFECT */ +/* ============================================= */ +/* Main dropdown container with EXTREME saturation */ +[data-theme="liquid-glass"] .bg-base-200.rounded-lg.shadow-lg.min-w-\[120px\] { + /* Extreme glass blur with MAXIMUM saturation */ + backdrop-filter: blur(24px) saturate(600%) brightness(1.2) contrast(1.1) !important; + -webkit-backdrop-filter: blur(24px) saturate(600%) brightness(1.2) contrast(1.1) !important; + background: linear-gradient( + 135deg, + rgba(138, 43, 226, 0.9), + rgba(33, 150, 243, 0.85), + rgba(124, 77, 255, 0.8), + rgba(255, 255, 255, 0.75) + ) !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.3) !important; + will-change: backdrop-filter !important; +} + +/* Thread dropdown now properly centered */ +[data-theme="liquid-glass"] .absolute.top-full.left-1\/2.transform.-translate-x-1\/2, +[data-theme="liquid-blue"] .absolute.top-full.left-1\/2.transform.-translate-x-1\/2 { + left: 50% !important; + transform: translateX(-50%) !important; + margin-left: 0 !important; +} + +/* Individual dropdown items with enhanced readability */ +[data-theme="liquid-glass"] .bg-base-200.rounded-lg.shadow-lg button { + color: white !important; + text-shadow: + 0 3px 10px rgba(0, 0, 0, 0.9), + 0 2px 5px rgba(0, 0, 0, 0.8), + 0 1px 2px rgba(0, 0, 0, 0.7), + 0 0 25px rgba(255, 255, 255, 0.4) !important; + font-weight: 700 !important; + letter-spacing: 0.5px !important; + background: transparent !important; /* Removed dark background */ +} + +/* Hover state with enhanced saturation and readability */ +[data-theme="liquid-glass"] .bg-base-200.rounded-lg.shadow-lg button:hover { + background: linear-gradient( + 135deg, + rgba(138, 43, 226, 0.45), + rgba(33, 150, 243, 0.4), + rgba(124, 77, 255, 0.35) + ) !important; + color: white !important; + transform: translateY(-1px) !important; + text-shadow: + 0 5px 15px rgba(0, 0, 0, 1), + 0 3px 8px rgba(0, 0, 0, 0.9), + 0 1px 3px rgba(0, 0, 0, 0.8), + 0 0 40px rgba(255, 255, 255, 0.6) !important; + filter: saturate(150%) !important; +} + +/* COMPREHENSIVE FIX FOR SEARCH DROPDOWN PROFILE HOVER RECTANGLE */ +/* Override ALL backgrounds on hover in search dropdown for profile elements */ +[data-theme="liquid-glass"] .dropdown-content a[data-npub]:hover *, +[data-theme="liquid-blue"] .dropdown-content a[data-npub]:hover *, +[data-theme="liquid-glass"] .dropdown-content [data-npub]:hover, +[data-theme="liquid-blue"] .dropdown-content [data-npub]:hover, +[data-theme="liquid-glass"] .dropdown-content .flex.flex-row.items-center.gap-2:has(span.hover\:underline):hover, +[data-theme="liquid-blue"] .dropdown-content .flex.flex-row.items-center.gap-2:has(span.hover\:underline):hover { + background: none !important; + background-color: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; +} + +/* Remove hover backgrounds from specific elements harboring the rectangle */ +[data-theme="liquid-glass"] .dropdown-content span:hover, +[data-theme="liquid-blue"] .dropdown-content span:hover, +[data-theme="liquid-glass"] .dropdown-content div:hover, +[data-theme="liquid-blue"] .dropdown-content div:hover, +[data-theme="liquid-glass"] .dropdown-content a:hover, +[data-theme="liquid-blue"] .dropdown-content a:hover { + background: none !important; + background-color: transparent !important; + box-shadow: none !important; + outline: none !important; + border: none !important; +} + +/* Force transparent backgrounds on hover for ANY child of profile rows in dropdown */ +[data-theme="liquid-glass"] .dropdown-content .flex.flex-row.items-center.gap-2:hover > *, +[data-theme="liquid-glass"] .dropdown-content .flex.flex-row.items-center.gap-2:hover > * > *, +[data-theme="liquid-blue"] .dropdown-content .flex.flex-row.items-center.gap-2:hover > *, +[data-theme="liquid-blue"] .dropdown-content .flex.flex-row.items-center.gap-2:hover > * > * { + background: none !important; + background-color: transparent !important; +} + +/* Fix name hover effects in search dropdown - remove background rectangle but keep underline */ +/* This targets the Name component's hover styling without affecting the section hover */ +[data-theme="liquid-glass"] .dropdown-content span.hover\:underline:hover, +[data-theme="liquid-blue"] .dropdown-content span.hover\:underline:hover { + background: none !important; + background-color: transparent !important; + box-shadow: none !important; + outline: none !important; + border: none !important; +} + +/* Comprehensive fix for any remaining background blocks on underlined hover text */ +/* Target all possible background sources including pseudo-elements and parent containers */ +[data-theme="liquid-glass"] .dropdown-content span:hover, +[data-theme="liquid-glass"] .dropdown-content span:hover *, +[data-theme="liquid-glass"] .dropdown-content div:hover, +[data-theme="liquid-glass"] .dropdown-content div:hover *, +[data-theme="liquid-blue"] .dropdown-content span:hover, +[data-theme="liquid-blue"] .dropdown-content span:hover *, +[data-theme="liquid-blue"] .dropdown-content div:hover, +[data-theme="liquid-blue"] .dropdown-content div:hover * { + background: none !important; + background-color: transparent !important; + background-image: none !important; + box-shadow: none !important; + border: none !important; + outline: none !important; + text-decoration: underline !important; /* Force underline to remain */ +} + +/* Additional specificity for profile hover highlights */ +[data-theme="liquid-glass"] .dropdown-content .flex.flex-row.items-center.gap-2:hover, +[data-theme="liquid-glass"] .dropdown-content .flex.flex-row.items-center.gap-2:hover *, +[data-theme="liquid-blue"] .dropdown-content .flex.flex-row.items-center.gap-2:hover, +[data-theme="liquid-blue"] .dropdown-content .flex.flex-row.items-center.gap-2:hover * { + background: transparent !important; + box-shadow: none !important; + border: none !important; + outline: none !important; +} + +/* Remove any highlight effects from text selection or focus rings */ +[data-theme="liquid-glass"] .dropdown-content .flex.flex-row.items-center.gap-2 span:focus, +[data-theme="liquid-blue"] .dropdown-content .flex.flex-row.items-center.gap-2 span:focus { + outline: none !important; + background: transparent !important; + box-shadow: none !important; +} + +/* Remove unwanted background styling from hover cursor pointer effects */ +[data-theme="liquid-glass"] .dropdown-content span.hover\:cursor-pointer:hover, +[data-theme="liquid-blue"] .dropdown-content span.hover\:cursor-pointer:hover { + background: none !important; + background-color: transparent !important; + box-shadow: none !important; + outline: none !important; + border: none !important; +} + +/* Theme selector - dark dropdown for readability in liquid glass theme */ +[data-theme="liquid-glass"] .select.select-primary option { + background: rgba(20, 20, 30, 0.95) !important; /* Light black background */ + color: white !important; /* White text */ + font-weight: 600 !important; +} + +/* Selected/highlighted option */ +[data-theme="liquid-glass"] .select.select-primary option:checked, +[data-theme="liquid-glass"] .select.select-primary option:hover { + background: rgba(40, 40, 60, 0.95) !important; /* Slightly lighter when selected */ + color: white !important; +} + + +/* Ensure proper margins and spacing for notification page */ +[data-theme="liquid-glass"] .mt-\[4em\] { + margin-top: 4em !important; +} + +/* Style notification filter grid items - keep subtle but remove glass container effect */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-3 button { + background: rgba(255, 255, 255, 0.08) !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; + border: 1px solid rgba(255, 255, 255, 0.12) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-3 button:hover { + background: rgba(255, 255, 255, 0.12) !important; + border-color: rgba(255, 255, 255, 0.2); + transform: translateY(-1px); +} + +/* Style enabled filter buttons */ +[data-theme="liquid-glass"] .grid.grid-cols-2.gap-3 button.bg-base-300 { + background: rgba(255, 255, 255, 0.15) !important; + border-color: rgba(255, 255, 255, 0.25); +} + +/* ============================================= */ +/* REPOSITORY AND BOOKMARKS PAGES GLASS EFFECT */ +/* ============================================= */ + +/* Apply glass effect to repository/bookmarks page structure */ +[data-theme="liquid-glass"] .flex:has(> div:has(> .border-t.border-l.border-b.border-\[var\(--border-color\)\].rounded-bl-lg.rounded-tl-lg)) { + position: relative; + background: transparent !important; + overflow: visible; + isolation: isolate; +} + +/* Glass background for repository/bookmarks pages */ +[data-theme="liquid-glass"] .flex:has(> div:has(> .border-t.border-l.border-b.border-\[var\(--border-color\)\].rounded-bl-lg.rounded-tl-lg))::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.03); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + border-radius: 0; /* Removed rounded edges */ + z-index: 0; + box-shadow: + 0 0 20px rgba(33, 150, 243, 0.15), + 0 0 40px rgba(138, 43, 226, 0.1), + inset 0 2px 3px rgba(255, 255, 255, 0.2), + inset 0 -2px 3px rgba(0, 0, 0, 0.15), + 0 12px 40px rgba(0, 0, 0, 0.2); +} + +/* Animated jelly border for repository/bookmarks pages */ +[data-theme="liquid-glass"] .flex:has(> div:has(> .border-t.border-l.border-b.border-\[var\(--border-color\)\].rounded-bl-lg.rounded-tl-lg))::after { + content: ''; + position: absolute; + top: -3px; + left: -3px; + right: -3px; + bottom: -3px; + background: linear-gradient( + 45deg, + rgba(33, 150, 243, 0.25), + rgba(124, 77, 255, 0.25), + rgba(138, 43, 226, 0.25), + rgba(33, 150, 243, 0.25) + ); + background-size: 300% 300%; + border-radius: 0; /* Removed rounded edges */ + z-index: -1; + filter: blur(6px); + opacity: 0.7; + animation: subtle-jelly-border 10s ease-in-out infinite; +} + +/* Make children relative for proper stacking */ +[data-theme="liquid-glass"] .flex:has(> div:has(> .border-t.border-l.border-b.border-\[var\(--border-color\)\].rounded-bl-lg.rounded-tl-lg)) > * { + position: relative; + z-index: 1; +} + +/* Style the content area for repositories/bookmarks */ +[data-theme="liquid-glass"] .border-t.border-l.border-b.border-\[var\(--border-color\)\].rounded-bl-lg.rounded-tl-lg { + background: transparent !important; + border-color: rgba(255, 255, 255, 0.08) !important; +} + +/* Style individual repo/bookmark cards */ +[data-theme="liquid-glass"] .border-t.border-l.border-b.border-\[var\(--border-color\)\].rounded-bl-lg.rounded-tl-lg > * { + background: rgba(255, 255, 255, 0.02); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.05); + transition: all 0.3s ease; +} + +[data-theme="liquid-glass"] .border-t.border-l.border-b.border-\[var\(--border-color\)\].rounded-bl-lg.rounded-tl-lg > *:hover { + background: rgba(255, 255, 255, 0.04); + border-color: rgba(255, 255, 255, 0.08); + transform: translateY(-2px); +} + +/* ============================================= */ +/* MIDDLEHEADER GLASS EFFECT WITHOUT ROUNDED CORNERS */ +/* ============================================= */ + +/* MiddleHeader - match Header Strip styling with square corners */ +[data-theme="liquid-glass"] header.sticky { + /* Match the Header Strip frost effect */ + background: rgba(255, 255, 255, 0.08) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; + border-bottom: none; /* No border for seamless transition */ + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); /* Match Header Strip */ + /* Force square corners */ + border-radius: 0 !important; + /* Ensure proper layout */ + position: sticky; + width: 100%; + pointer-events: auto; +} + +/* Ensure the inner content is properly layered */ +[data-theme="liquid-glass"] header.sticky > div { + background: transparent; + position: relative; + z-index: 1; + border-radius: 0 !important; +} + +/* Remove any pseudo-element borders */ +[data-theme="liquid-glass"] header.sticky::before { + display: none; /* Remove pseudo-element entirely */ +} + +/* Override any child element rounded corners */ +[data-theme="liquid-glass"] header.sticky * { + border-radius: 0 !important; +} + +/* Top glass highlight for repository/bookmarks pages */ +[data-theme="liquid-glass"] .flex:has(> div:has(> .border-t.border-l.border-b.border-\[var\(--border-color\)\].rounded-bl-lg.rounded-tl-lg)) > div:first-child::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 120px; + background: linear-gradient( + to bottom, + rgba(255, 255, 255, 0.1) 0%, + rgba(255, 255, 255, 0.04) 30%, + transparent 100% + ); + pointer-events: none; + z-index: 2; + border-radius: 0; /* Removed rounded edges */ +} + +/* Fix right column spacing */ +[data-theme="liquid-glass"] .border-l.border-\[var\(--border-color\)\].mt-\[4em\] { + margin-top: 4em !important; + background: transparent !important; + border-color: rgba(255, 255, 255, 0.08) !important; +} + +/* Custom scrollbar for organization members list */ +.custom-organization-scrollbar { + scrollbar-width: thin; + scrollbar-color: rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.05); +} + +.custom-organization-scrollbar::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +.custom-organization-scrollbar::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.05); + border-radius: 4px; + margin: 2px; +} + +.custom-organization-scrollbar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, rgba(0, 0, 0, 0.15) 0%, rgba(0, 0, 0, 0.08) 100%); + border-radius: 4px; + border: 1px solid rgba(0, 0, 0, 0.08); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15); +} + +.custom-organization-scrollbar::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.2) 100%); + border-color: rgba(0, 0, 0, 0.15); +} + +.custom-organization-scrollbar::-webkit-scrollbar-corner { + background: transparent; +} + +/* Dark theme scrollbar for organization members */ +[data-theme="dark"] .custom-organization-scrollbar { + scrollbar-color: rgba(255, 255, 255, 0.25) rgba(255, 255, 255, 0.08); +} + +[data-theme="dark"] .custom-organization-scrollbar::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.08); +} + +[data-theme="dark"] .custom-organization-scrollbar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 100%); + border: 1px solid rgba(255, 255, 255, 0.12); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2); +} + +[data-theme="dark"] .custom-organization-scrollbar::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.25) 100%); + border-color: rgba(255, 255, 255, 0.2); +} + +/* Blue theme scrollbar for organization members (formerly Light) */ +[data-theme="light"] .custom-organization-scrollbar { + scrollbar-color: rgba(255, 255, 255, 0.25) rgba(255, 255, 255, 0.08); +} + +[data-theme="light"] .custom-organization-scrollbar::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.08); +} + +[data-theme="light"] .custom-organization-scrollbar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 100%); + border: 1px solid rgba(255, 255, 255, 0.12); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2); +} + +[data-theme="light"] .custom-organization-scrollbar::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.25) 100%); + border-color: rgba(255, 255, 255, 0.2); +} + +/* Dark Blue theme scrollbar for organization members (formerly Dim) */ +[data-theme="dim"] .custom-organization-scrollbar { + scrollbar-color: rgba(255, 255, 255, 0.2) rgba(255, 255, 255, 0.06); +} + +[data-theme="dim"] .custom-organization-scrollbar::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.06); +} + +[data-theme="dim"] .custom-organization-scrollbar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.1) 100%); + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1); +} + +[data-theme="dim"] .custom-organization-scrollbar::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0.2) 100%); + border-color: rgba(255, 255, 255, 0.15); +} + +/* Liquid Glass theme scrollbar for organization members */ +[data-theme="liquid-glass"] .custom-organization-scrollbar { + scrollbar-color: rgba(255, 255, 255, 0.2) rgba(255, 255, 255, 0.08); +} + +[data-theme="liquid-glass"] .custom-organization-scrollbar::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.08); +} + +[data-theme="liquid-glass"] .custom-organization-scrollbar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.12) 100%); + border: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.15); +} + +[data-theme="liquid-glass"] .custom-organization-scrollbar::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0.2) 100%); + border-color: rgba(255, 255, 255, 0.2); +} + +/* Liquid Blue theme scrollbar for organization members */ +[data-theme="liquid-blue"] .custom-organization-scrollbar { + scrollbar-color: rgba(0, 255, 255, 0.25) rgba(0, 255, 255, 0.1); +} + +[data-theme="liquid-blue"] .custom-organization-scrollbar::-webkit-scrollbar-track { + background: rgba(0, 255, 255, 0.1); +} + +[data-theme="liquid-blue"] .custom-organization-scrollbar::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, rgba(0, 255, 255, 0.25) 0%, rgba(0, 255, 255, 0.15) 100%); + border: 1px solid rgba(0, 255, 255, 0.18); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3); +} + +[data-theme="liquid-blue"] .custom-organization-scrollbar::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, rgba(0, 255, 255, 0.35) 0%, rgba(0, 255, 255, 0.25) 100%); + border-color: rgba(0, 255, 255, 0.25); +} + +/* Liquid Glass Theme - Purple selector with lighter background */ +[data-theme="liquid-glass"] .theme-selector { + background: rgba(30, 30, 45, 0.85) !important; + color: white !important; + border: 1px solid rgba(168, 85, 247, 0.4) !important; + backdrop-filter: blur(10px) !important; + -webkit-backdrop-filter: blur(10px) !important; +} + +[data-theme="liquid-glass"] .theme-selector:focus { + background: rgba(35, 35, 50, 0.85) !important; + border-color: rgba(168, 85, 247, 0.6) !important; + box-shadow: 0 0 15px rgba(168, 85, 247, 0.4) !important; +} + +[data-theme="liquid-glass"] .theme-selector option { + background: rgba(30, 30, 45, 0.85) !important; + color: white !important; + border: none !important; +} + +[data-theme="liquid-glass"] .theme-selector option:hover, +[data-theme="liquid-glass"] .theme-selector option:focus { + background: rgba(45, 45, 65, 0.85) !important; + color: white !important; +} + +/* Liquid Blue Theme - Cyan selector with lighter background */ +[data-theme="liquid-blue"] .theme-selector { + background: rgba(30, 30, 45, 0.85) !important; + color: white !important; + border: 1px solid rgba(0, 255, 255, 0.4) !important; + backdrop-filter: blur(10px) !important; + -webkit-backdrop-filter: blur(10px) !important; +} + +[data-theme="liquid-blue"] .theme-selector:focus { + background: rgba(35, 35, 50, 0.85) !important; + border-color: rgba(0, 255, 255, 0.6) !important; + box-shadow: 0 0 15px rgba(0, 255, 255, 0.4) !important; +} + +/* Theme-dependent focus styles for theme selector */ +[data-theme="liquid-glass"] .theme-selector:focus { + border-color: rgba(168, 85, 247, 0.6) !important; + box-shadow: 0 0 15px rgba(168, 85, 247, 0.4) !important; +} + +[data-theme="dark"] .theme-selector:focus { + border-color: rgba(255, 255, 255, 0.6) !important; + box-shadow: 0 0 15px rgba(255, 255, 255, 0.3) !important; +} + +[data-theme="dim"] .theme-selector:focus { + border-color: rgba(255, 255, 255, 0.5) !important; + box-shadow: 0 0 12px rgba(255, 255, 255, 0.25) !important; +} + +[data-theme="light"] .theme-selector:focus { + border-color: rgba(0, 0, 0, 0.6) !important; + box-shadow: 0 0 12px rgba(0, 0, 0, 0.2) !important; +} + +[data-theme="liquid-blue"] .theme-selector option { + background: rgba(30, 30, 45, 0.85) !important; + color: white !important; + border: none !important; +} + +[data-theme="liquid-blue"] .theme-selector option:hover, +[data-theme="liquid-blue"] .theme-selector option:focus { + background: rgba(45, 45, 65, 0.85) !important; + color: white !important; +} + +/* Liquid Blue Theme - UserToolbar button hover glow effects */ +[data-theme="liquid-blue"] .border.border-1.rounded-md.border-\[--border-color\].p-2.flex.items-center.justify-center.cursor-pointer.hover\:bg-base-300.border-2:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.2) !important; + box-shadow: + inset 0 1px 3px rgba(0, 255, 255, 0.1), + 0 0 2px rgba(0, 255, 255, 0.15) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; + border-radius: 8px !important; +} + +[data-theme="liquid-blue"] .border.border-1.rounded-md.border-\[--border-color\].p-2.flex.items-center.justify-center.cursor-pointer.hover\:bg-base-300.border-2:hover svg, +[data-theme="liquid-blue"] .border.border-1.rounded-md.border-\[--border-color\].p-2.flex.items-center.justify-center.cursor-pointer.hover\:bg-base-300.border-2:hover .text-gray-300 { + color: rgba(0, 255, 255, 0.9) !important; + filter: drop-shadow(0 0 5px rgba(0, 255, 255, 0.5)) !important; +} + +[data-theme="liquid-blue"] .border.border-1.rounded-md.border-\[--border-color\].p-2.flex.items-center.justify-center.cursor-pointer.hover\:bg-base-300.border-2:hover .indicator-item { + background: rgba(0, 255, 255, 0.8) !important; + box-shadow: 0 0 10px rgba(0, 255, 255, 0.6) !important; +} + +/* Liquid Blue Theme - Bell icon specific styling */ +[data-theme="liquid-blue"] .text-gray-300.opacity-75:hover { + color: rgba(0, 255, 255, 0.9) !important; + filter: drop-shadow(0 0 5px rgba(0, 255, 255, 0.5)) !important; +} + +/* Feed item animation for consistency - used by both feed items and notification items */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* Liquid Blue Theme - Wallet icon specific styling */ +[data-theme="liquid-blue"] button:hover .text-gray-300.opacity-75 { + color: rgba(0, 255, 255, 0.9) !important; + filter: drop-shadow(0 0 4px rgba(0, 255, 255, 0.4)) !important; +} + +/* Liquid Blue Theme - Wallet button specific hover effects */ +[data-theme="liquid-blue"] button[class*="wallet"]:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.25) !important; + box-shadow: + inset 0 1px 2px rgba(0, 255, 255, 0.12), + 0 0 4px rgba(0, 255, 255, 0.2) !important; +} + +/* Liquid Blue Theme - Remove unwanted hover effects from bio section */ +[data-theme="liquid-blue"] .flex.flex-col.gap-2.no-highlight article:hover, +[data-theme="liquid-blue"] .profile-bio-article:hover { + background: transparent !important; + border: none !important; + transform: none !important; + box-shadow: none !important; + border-radius: 0 !important; +} + +[data-theme="liquid-blue"] .flex.flex-col.gap-2.no-highlight article, +[data-theme="liquid-blue"] .profile-bio-article { + border: none !important; + transition: none !important; + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; +} + +/* Fix Liquid Blue theme tab underline color */ +[data-theme="liquid-blue"] .tab[class*="border-b-2"][class*="border-[var(--border-primary)]"] { + border-color: rgba(0, 255, 255, 0.6) !important; +} + +/* Fix tab transitions to use same color as final state - no flicker */ +[data-theme="liquid-glass"] .tab { + transition: border-color 0.15s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +[data-theme="liquid-glass"] .tab[class*="border-b-2"] { + border-color: rgba(168, 85, 247, 0.6) !important; +} + +[data-theme="liquid-glass"] .tab:not([class*="border-b-2"]) { + border-color: transparent !important; +} + +[data-theme="liquid-blue"] .tab { + transition: border-color 0.15s cubic-bezier(0.16, 1, 0.3, 1) !important; +} + +[data-theme="liquid-blue"] .tab[class*="border-b-2"] { + border-color: rgba(0, 255, 255, 0.6) !important; +} + +[data-theme="liquid-blue"] .tab:not([class*="border-b-2"]) { + border-color: transparent !important; +} + +/* Improve badge styling in liquid blue theme */ +[data-theme="liquid-blue"] .badge { + background: rgba(0, 255, 255, 0.15) !important; + border: 1px solid rgba(0, 255, 255, 0.3) !important; + color: rgba(255, 255, 255, 0.95) !important; + box-shadow: 0 0 8px rgba(0, 255, 255, 0.2) !important; +} + +/* Improve following/repos/relays button backgrounds in liquid blue theme */ +[data-theme="liquid-blue"] .btn-neutral { + background: rgba(0, 255, 255, 0.08) !important; + border: 1px solid rgba(0, 255, 255, 0.2) !important; + color: rgba(255, 255, 255, 0.9) !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; + transform: none !important; +} + +[data-theme="liquid-blue"] .btn-neutral:hover { + background: rgba(0, 255, 255, 0.12) !important; + border-color: rgba(0, 255, 255, 0.35) !important; + color: white !important; + box-shadow: 0 0 8px rgba(0, 255, 255, 0.25) !important; + transform: none !important; +} + +/* Replace lifting animation with glow in Liquid Glass theme */ +[data-theme="liquid-glass"] .btn-neutral { + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; + transform: none !important; +} + +[data-theme="liquid-glass"] .btn-neutral:hover { + transform: none !important; + box-shadow: inset 0 1px 3px rgba(255, 255, 255, 0.2), 0 0 8px rgba(255, 255, 255, 0.15) !important; +} + +/* Use mention color for links in all themes - consistent with @ names */ +.text-primary { + color: rgb(59 130 246) !important; /* Classic hyperlink blue */ +} + +.text-primary:hover { + color: rgb(37 99 235) !important; /* Darker blue on hover */ +} + +/* Note: Animation disabling is now handled directly in the animation definitions above */ + +/* ============================================= */ +/* RECENT REPOSITORIES THEME-SPECIFIC HOVER EFFECTS */ +/* ============================================= */ + +/* Liquid Glass Theme - Recent Repositories Hover */ +[data-theme="liquid-glass"] .recent-repo-item:hover { + background: rgba(255, 255, 255, 0.08) !important; + border-color: rgba(255, 255, 255, 0.2) !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; + box-shadow: + 0 0 15px rgba(138, 43, 226, 0.2), + 0 0 30px rgba(33, 150, 243, 0.1), + inset 0 1px 3px rgba(255, 255, 255, 0.1), + inset 0 -1px 3px rgba(0, 0, 0, 0.05) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; +} + +/* Liquid Blue Theme - Recent Repositories Hover */ +[data-theme="liquid-blue"] .recent-repo-item:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.2) !important; + border: 1px solid rgba(0, 255, 255, 0.15) !important; + box-shadow: + 0 0 15px rgba(0, 255, 255, 0.2), + 0 0 30px rgba(0, 255, 170, 0.15), + inset 0 1px 3px rgba(0, 255, 255, 0.1), + inset 0 -1px 3px rgba(0, 0, 0, 0.05) !important; + backdrop-filter: blur(8px) !important; + -webkit-backdrop-filter: blur(8px) !important; +} + +/* Theme-specific remove button hover states */ +[data-theme="liquid-glass"] .recent-repo-item .remove-button:hover { + background: rgba(255, 255, 255, 0.1) !important; + box-shadow: 0 0 8px rgba(244, 63, 94, 0.3) !important; + color: rgba(244, 63, 94, 0.9) !important; +} + +[data-theme="liquid-blue"] .recent-repo-item .remove-button:hover { + background: rgba(0, 255, 255, 0.1) !important; + box-shadow: 0 0 8px rgba(244, 63, 94, 0.5) !important; + color: rgba(244, 63, 94, 0.9) !important; +} + +/* Theme-specific repository name hover colors */ +[data-theme="liquid-glass"] .recent-repo-item .repo-name-link:hover { + color: rgba(168, 85, 247, 0.9) !important; /* Purple-500 for liquid glass */ +} + +[data-theme="liquid-blue"] .recent-repo-item .repo-name-link:hover { + color: rgba(0, 255, 255, 0.9) !important; /* Cyan-300 for liquid blue */ +} + +/* Theme-specific repository owner name hover colors */ +[data-theme="liquid-glass"] .recent-repo-item .repo-owner-name:hover { + color: rgba(168, 85, 247, 0.9) !important; /* Purple-500 for liquid glass */ +} + +[data-theme="liquid-blue"] .recent-repo-item .repo-owner-name:hover { + color: rgba(0, 255, 255, 0.9) !important; /* Cyan-300 for liquid blue */ +} + +/* File Explorer Animations */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.file-explorer-item { + animation: fadeInUp 0.3s ease-out forwards; +} + +/* Theme-specific File Explorer hover states */ +[data-theme="liquid-glass"] .file-explorer-item:hover { + background: linear-gradient( + to right, + rgba(255, 255, 255, 0.08), + rgba(255, 255, 255, 0.04) + ) !important; + box-shadow: + 0 4px 12px rgba(168, 85, 247, 0.15), + 0 2px 4px rgba(168, 85, 247, 0.1) !important; + backdrop-filter: blur(10px); +} + +[data-theme="liquid-blue"] .file-explorer-item:hover { + background: linear-gradient( + to right, + rgba(0, 255, 255, 0.08), + rgba(0, 255, 255, 0.04) + ) !important; + box-shadow: + 0 4px 12px rgba(0, 255, 255, 0.15), + 0 2px 4px rgba(0, 255, 255, 0.1) !important; + backdrop-filter: blur(10px); +} + +/* Default theme File Explorer hover */ +.file-explorer-item:hover { + background: linear-gradient( + to right, + rgba(var(--base-200), 0.8), + rgba(var(--base-200), 0.4) + ); +} + +/* File name hover colors for themes */ +[data-theme="liquid-glass"] .file-explorer-item:hover .group-hover\:text-primary { + color: rgba(168, 85, 247, 0.9) !important; +} + +[data-theme="liquid-blue"] .file-explorer-item:hover .group-hover\:text-primary { + color: rgba(0, 255, 255, 0.9) !important; +} + +[data-theme="liquid-glass"] .file-explorer-item:hover .group-hover\:text-accent { + color: rgba(236, 72, 153, 0.9) !important; +} + +[data-theme="liquid-blue"] .file-explorer-item:hover .group-hover\:text-accent { + color: rgba(34, 211, 238, 0.9) !important; +} + +/* ============================================= */ +/* LIQUID BLUE THEME - FIX SETTINGS PAGE HOVER COLORS */ +/* ============================================= */ + +/* Fix settings page navigation button hover colors in liquid blue theme */ +[data-theme="liquid-blue"] .px-2\.5.py-1\.5.flex.justify-between.items-center.border.border-custom:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.2) !important; +} + +/* Fix notification filter button hover colors in liquid blue theme */ +[data-theme="liquid-blue"] .grid.grid-cols-2.gap-3 button:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.2) !important; +} + +/* Fix notification items hover colors in liquid blue theme */ +[data-theme="liquid-blue"] .flex.flex-col.p-4.md\:px-8.border-b.border-\[var\(--border-color\)\].transition-colors.duration-300.cursor-pointer:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.2) !important; +} + +/* Fix recent search items hover colors in liquid blue theme */ +[data-theme="liquid-blue"] .grid.grid-cols-\[1fr\,auto\].items-center.w-full.p-2.hover\:bg-base-200.rounded-lg.gap-2:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.2) !important; +} + +/* Fix recent repository items hover colors in liquid blue theme */ +[data-theme="liquid-blue"] .flex.justify-between.items-center.w-full.p-2.hover\:bg-base-200.rounded-lg:hover { + background: rgba(0, 255, 255, 0.08) !important; + border-color: rgba(0, 255, 255, 0.2) !important; +} + +/* ============================================= */ +/* LIQUID BLUE THEME - REDUCE BRIGHTNESS OF PRIMARY BUTTONS */ +/* ============================================= */ + +/* Reduce brightness of Create Repository button */ +[data-theme="liquid-blue"] .btn.btn-primary:has(.text-base-content) { + filter: brightness(0.7) !important; +} + +[data-theme="liquid-blue"] .btn.btn-primary:has(.text-base-content):hover { + filter: brightness(0.8) !important; +} + +/* Reduce brightness of Create Organization button */ +[data-theme="liquid-blue"] .btn.btn-primary.min-h-\[2\.3rem\].h-\[1\.5rem\] { + filter: brightness(0.7) !important; +} + +[data-theme="liquid-blue"] .btn.btn-primary.min-h-\[2\.3rem\].h-\[1\.5rem\]:hover { + filter: brightness(0.8) !important; +} + +/* Reduce brightness of Post button */ +[data-theme="liquid-blue"] .flex.items-center.justify-center.xl\:justify-start.py-2.w-full.gap-4.cursor-pointer.rounded-md.group:has(.bg-gradient-to-t) { + filter: brightness(0.7) !important; +} + +[data-theme="liquid-blue"] .flex.items-center.justify-center.xl\:justify-start.py-2.w-full.gap-4.cursor-pointer.rounded-md.group:has(.bg-gradient-to-t):hover { + filter: brightness(0.8) !important; +} + +/* ============================================= */ +/* EMOJI PICKER STYLING AND ANIMATIONS */ +/* ============================================= */ + +/* Enhanced emoji picker animations */ +.emoji-picker-container { + filter: drop-shadow(0 8px 20px rgba(0, 0, 0, 0.15)); + border-radius: 12px; + overflow: hidden; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); +} + +/* Animation keyframes for smooth emoji picker entrance */ +@keyframes emojiPickerFadeIn { + 0% { + opacity: 0; + transform: scale(0.9) translateY(-10px); + } + 100% { + opacity: 1; + transform: scale(1) translateY(0); + } +} + +/* Apply animation when opening */ +.emoji-picker-container[style*="opacity: 1"] { + animation: emojiPickerFadeIn 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards; +} + +/* Theme-specific emoji picker styling */ +[data-theme="liquid-blue"] .emoji-picker-container { + background: rgba(0, 255, 255, 0.05); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: 1px solid rgba(0, 255, 255, 0.2); +} + +[data-theme="liquid-glass"] .emoji-picker-container { + background: rgba(255, 255, 255, 0.08); + backdrop-filter: blur(15px); + -webkit-backdrop-filter: blur(15px); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +[data-theme="dark"] .emoji-picker-container { + background: rgba(0, 0, 0, 0.8); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +[data-theme="light"] .emoji-picker-container { + background: rgba(255, 255, 255, 0.95); + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); +} + +/* Emoji hover animations */ +.emoji-picker-container button { + transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1) !important; +} + +.emoji-picker-container button:hover { + transform: scale(1.15) !important; +} + +/* Category tabs hover effects */ +.emoji-picker-container .epr-emoji-category-label { + transition: opacity 0.2s ease !important; +} + +.emoji-picker-container .epr-emoji-category-label:hover { + opacity: 0.8 !important; +} + +/* Search input styling */ +.emoji-picker-container .epr-search-container input { + transition: all 0.2s ease !important; +} + +.emoji-picker-container .epr-search-container input:focus { + transform: scale(1.02) !important; + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25) !important; +} + +/* ============================================= */ +/* SEARCHBOX THEME OVERRIDES */ +/* ============================================= */ + +/* Universal selected search mode button styling for all themes */ +.dropdown-content.menu button.bg-primary { + background: linear-gradient(135deg, rgba(20, 184, 166, 0.8) 0%, rgba(34, 197, 94, 0.7) 100%) !important; /* Turquoise to green-blue gradient */ + color: white !important; + border: 1px solid rgba(20, 184, 166, 0.6) !important; /* Turquoise border */ + box-shadow: 0 0 0 1px rgba(20, 184, 166, 0.4) !important; /* Subtle turquoise glow */ + font-weight: 600 !important; /* Slightly bolder text */ +} + +.dropdown-content.menu button.bg-primary:hover { + background: linear-gradient(135deg, rgba(20, 184, 166, 0.9) 0%, rgba(34, 197, 94, 0.8) 100%) !important; /* Enhanced gradient on hover */ + box-shadow: 0 0 0 2px rgba(20, 184, 166, 0.5) !important; /* Enhanced turquoise glow on hover */ + color: white !important; /* Keep text white on hover */ +} + +/* Make unselected search mode buttons inherit theme-appropriate colors */ +.dropdown-content.menu button:not(.bg-primary) { + color: inherit !important; + font-weight: 500 !important; +} + +/* ============================================= */ +/* THREAD DROPDOWN BUTTONS - MAXIMUM SPECIFICITY OVERRIDE */ +/* ============================================= */ + +/* -------------------------------- */ +/* SOLID FILLED THEME BUTTONS - No Glass/Translucency */ +/* -------------------------------- */ + +/* Liquid Glass: Muted unselected buttons - feel "unselected" not bright */ +[data-theme="liquid-glass"] .dropdown-content.menu .thread-dropdown-btn:not(.bg-primary), +[data-theme="liquid-glass"] .menu li > .thread-dropdown-btn:not(.bg-primary) { + background: #374151 !important; /* MUTED dark gray - feels unselected */ + color: white !important; /* White text */ + border: 1px solid #6B7280 !important; /* Muted border */ + backdrop-filter: none !important; /* Solid, no glass */ + -webkit-backdrop-filter: none !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15) !important; +} + +[data-theme="liquid-glass"] .dropdown-content.menu .thread-dropdown-btn:not(.bg-primary):hover, +[data-theme="liquid-glass"] .menu li > .thread-dropdown-btn:not(.bg-primary):hover { + background: #4B5563 !important; /* Slightly brighter gray on hover */ + border-color: #9CA3AF !important; + transform: translateY(-1px) !important; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2) !important; +} + +/* Liquid Blue: Muted unselected buttons - feel "unselected" with subtle hint */ +[data-theme="liquid-blue"] .dropdown-content.menu .thread-dropdown-btn:not(.bg-primary), +[data-theme="liquid-blue"] .menu li > .thread-dropdown-btn:not(.bg-primary) { + background: #475569 !important; /* MUTED slate - feels unselected */ + color: white !important; /* White text */ + border: 1px solid #64748B !important; /* Muted slate border */ + backdrop-filter: none !important; /* Solid, no glass */ + -webkit-backdrop-filter: none !important; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15) !important; +} + +[data-theme="liquid-blue"] .dropdown-content.menu .thread-dropdown-btn:not(.bg-primary):hover, +[data-theme="liquid-blue"] .menu li > .thread-dropdown-btn:not(.bg-primary):hover { + background: #5B6470 !important; /* Slightly brighter slate on hover */ + border-color: #94A3B8 !important; + transform: translateY(-1px) !important; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2) !important; +} + +/* Override selected buttons using theme primary/secondary gradients - same as .btn-primary */ +[data-theme="liquid-glass"] .dropdown-content.menu .thread-dropdown-btn.bg-primary, +[data-theme="liquid-glass"] .menu li > .thread-dropdown-btn.bg-primary { + background: linear-gradient(135deg, var(--secondary), var(--primary)) !important; /* Purple gradient: secondary first (AF52DE → 007AFF) */ + color: white !important; /* White text */ + border: none !important; /* No border like liquid blue .btn-primary */ + box-shadow: 0 6px 20px rgba(127, 61, 255, 0.3) !important; /* Purple shadow */ +} + +[data-theme="liquid-glass"] .dropdown-content.menu .thread-dropdown-btn.bg-primary:hover, +[data-theme="liquid-glass"] .menu li > .thread-dropdown-btn.bg-primary:hover { + background: linear-gradient(135deg, var(--secondary), var(--primary)) !important; /* Same purple gradient */ + opacity: 0.9 !important; /* Same as liquid blue hover */ + box-shadow: 0 8px 24px rgba(127, 61, 255, 0.4) !important; /* Enhanced purple shadow */ + transform: translateY(-1px) !important; /* Subtle lift */ +} + +[data-theme="liquid-blue"] .dropdown-content.menu .thread-dropdown-btn.bg-primary, +[data-theme="liquid-blue"] .menu li > .thread-dropdown-btn.bg-primary { + background: linear-gradient(135deg, var(--primary), var(--secondary)) !important; /* Cyan gradient: primary first (00FFFF → 00FFAA) */ + color: white !important; /* White text */ + border: none !important; /* No border like liquid blue .btn-primary */ + box-shadow: 0 8px 24px rgba(0, 255, 255, 0.3) !important; /* Cyan shadow exactly like .btn-primary */ +} + +[data-theme="liquid-blue"] .dropdown-content.menu .thread-dropdown-btn.bg-primary:hover, +[data-theme="liquid-blue"] .menu li > .thread-dropdown-btn.bg-primary:hover { + background: linear-gradient(135deg, var(--primary), var(--secondary)) !important; /* Same cyan gradient */ + opacity: 0.9 !important; /* Same as liquid blue hover */ + box-shadow: 0 12px 32px rgba(0, 255, 255, 0.4) !important; /* Enhanced cyan shadow like .btn-primary:hover */ + transform: translateY(-2px) !important; /* Same lift as .btn-primary:hover */ +} + +/* ============================================= */ +/* THREAD DROPDOWN BUTTON POSITIONING - MOVE LEFT */ +/* ============================================= */ + +/* Reduce thread dropdown width for better proportion - moderate size */ +[data-theme="liquid-glass"] .dropdown-content.menu.shadow-2xl.bg-black\/80.rounded-box.p-3.w-full.border, +[data-theme="liquid-blue"] .dropdown-content.menu.shadow-2xl.bg-black\/80.rounded-box.p-3.w-full.border { + width: 341px !important; /* 341px width */ + max-width: 95vw !important; /* Prevent overflow on small screens */ +} + +/* Reduce space to the right of people and strangers icons */ +[data-theme="liquid-glass"] .people-btn, +[data-theme="liquid-glass"] .strangers-btn, +[data-theme="liquid-blue"] .people-btn, +[data-theme="liquid-blue"] .strangers-btn { + gap: 0.125rem !important; /* Much tighter gap between icon and text */ +} + +/* Move thread dropdown buttons slightly left for better alignment */ +[data-theme="liquid-glass"] .dropdown-content.menu .thread-dropdown-btn, +[data-theme="liquid-glass"] .menu li > .thread-dropdown-btn { + padding-left: 0.5rem !important; /* Reduce left padding */ + margin-left: -0.3rem !important; /* Add negative left margin */ +} + +[data-theme="liquid-blue"] .dropdown-content.menu .thread-dropdown-btn, +[data-theme="liquid-blue"] .menu li > .thread-dropdown-btn { + padding-left: 0.5rem !important; /* Reduce left padding */ + margin-left: -0.3rem !important; /* Add negative left margin */ +} + +/* Ensure container accommodates the adjusted positioning */ +[data-theme="liquid-glass"] .dropdown-content.menu li:has(.thread-dropdown-btn), +[data-theme="liquid-blue"] .dropdown-content.menu li:has(.thread-dropdown-btn) { + padding-left: 0.3rem !important; /* Reduce container left padding */ +} + +/* Ensure emoji and image buttons use teal hover color in liquid-blue theme */ +[data-theme="liquid-blue"] .HomeFeedTextarea-container button:hover svg, +[data-theme="liquid-blue"] .HomeFeedTextarea-container svg:hover, +[data-theme="liquid-blue"] button:hover svg[class*="text-secondary"], +[data-theme="liquid-blue"] svg[class*="text-secondary"]:hover { + color: rgb(20, 184, 166) !important; /* teal-400 */ +} + +/* ============================================= */ +/* THINKING INDICATOR ANIMATIONS */ +/* ============================================= */ + +/* Sleek professional pulse animation for both themes */ +/* ============================================= */ +/* RELAY SETTINGS PAGE - LIQUID BLUE BACKDROP */ +/* ============================================= */ + +/* Apply Liquid Blue gradient to Relay Settings page - MATCHING DASHBOARD STYLE */ +[class*="relay-settings"], +[class*="RelaySettings"], +[data-*="relay-settings"], +[data-*="relaysettings"], +.h-screen.w-full.flex.relative:has(.bg-base-100.overflow-y-auto), +.h-screen.w-full.flex:has(.bg-base-100.overflow-y-auto) { + /* Match the relay dashboard background pattern - start with dark base */ + background: #000000 !important; + min-height: 100vh; + position: relative; + overflow: hidden; + + /* Multi-layer liquid blue gradient background - MATCHING DASHBOARD */ + &::before { + content: ''; + position: fixed; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: + radial-gradient(circle at 20% 50%, rgba(0, 255, 255, 0.15) 0%, transparent 40%), + radial-gradient(circle at 80% 20%, rgba(0, 255, 170, 0.12) 0%, transparent 45%), + radial-gradient(circle at 60% 80%, rgba(20, 184, 166, 0.12) 0%, transparent 45%), + radial-gradient(circle at 40% 40%, rgba(0, 221, 255, 0.08) 0%, transparent 50%); + pointer-events: none; + z-index: 0; + animation: liquidBackground 30s ease infinite, rotate 60s linear infinite; + } + + /* Additional animated gradient layer - MATCHING DASHBOARD */ + &::after { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(135deg, + rgba(0, 255, 255, 0.03) 0%, + rgba(0, 255, 170, 0.03) 25%, + rgba(20, 184, 166, 0.03) 50%, + rgba(0, 221, 255, 0.03) 75%, + rgba(0, 255, 255, 0.03) 100%); + background-size: 400% 400%; + animation: liquidFlow 20s ease infinite; + pointer-events: none; + z-index: 0; + } + + /* Ensure content is above background layers */ + > * { + position: relative; + z-index: 1; + } + + color: rgba(255, 255, 255, 0.95); +} + +/* Make all relay settings content areas transparent to show the gradient */ +[class*="relay-settings"] .bg-base-100, +[class*="RelaySettings"] .bg-base-100, +[data-*="relay-settings"] .bg-base-100, +[data-*="relaysettings"] .bg-base-100, +.h-screen.w-full.flex.relative .bg-base-100.overflow-y-auto, +.h-screen.w-full.flex .bg-base-100.overflow-y-auto { + background: transparent !important; + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; +} + +/* Ensure glass components still look great against the gradient */ +[class*="relay-settings"] [data-theme*="liquid"], +[class*="RelaySettings"] [data-theme*="liquid"], +[data-*="relay-settings"] [data-theme*="liquid"], +[data-*="relaysettings"] [data-theme*="liquid"] { + background: transparent !important; +} + +/* The existing relay settings theme overrides are already comprehensive */ + +@keyframes sleekPulse { + 0%, 60%, 100% { + opacity: 0.4; + transform: scale(0.9); + } + 30% { + opacity: 0.8; + transform: scale(1.1); + } +} \ No newline at end of file diff --git a/liquid-glass.css b/liquid-glass.css new file mode 100644 index 00000000..fe8b9c73 --- /dev/null +++ b/liquid-glass.css @@ -0,0 +1,450 @@ +/* Liquid Blue Glass Theme - Futuristic AI Interface */ +/* Inspired by Tony Stark's Jarvis and modern sci-fi interfaces */ + +:root { + /* Primary Liquid Blue Colors */ + --liquid-cyan: #00FFFF; + --liquid-turquoise: #00FFAA; + --liquid-teal: #14B8A6; + --liquid-bright-teal: #00DDFF; + --liquid-light-turquoise: #5EEAD4; + + /* Glass Effects */ + --glass-bg: rgba(0, 255, 255, 0.03); + --glass-border: rgba(0, 255, 255, 0.15); + --glass-shadow: 0 8px 32px 0 rgba(0, 255, 255, 0.1); + --glass-blur: blur(10px); + + /* Glow Effects */ + --glow-sm: 0 0 10px rgba(0, 255, 255, 0.3); + --glow-md: 0 0 20px rgba(0, 255, 255, 0.4); + --glow-lg: 0 0 30px rgba(0, 255, 255, 0.5); + --text-glow: 0 0 10px rgba(0, 255, 255, 0.6); +} + +/* Animated Background Gradients */ +@keyframes liquidFlow { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +@keyframes pulse { + 0%, 100% { + opacity: 1; + } + 50% { + opacity: 0.8; + } +} + +@keyframes borderGlow { + 0%, 100% { + border-color: rgba(0, 255, 255, 0.2); + box-shadow: 0 0 5px rgba(0, 255, 255, 0.2); + } + 50% { + border-color: rgba(0, 255, 255, 0.4); + box-shadow: 0 0 15px rgba(0, 255, 255, 0.4); + } +} + +/* Glass Morphism Base */ +.glass-panel { + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + box-shadow: var(--glass-shadow); + border-radius: 8px; + transition: all 0.3s ease; +} + +.glass-panel:hover { + box-shadow: var(--glow-md); + border-color: rgba(0, 255, 255, 0.3); + transform: translateY(-2px); +} + +/* Liquid Blue Buttons */ +.liquid-button { + background: linear-gradient(135deg, var(--liquid-cyan) 0%, var(--liquid-turquoise) 100%); + color: #000000; + border: none; + padding: 10px 20px; + border-radius: 4px; + font-weight: 600; + position: relative; + overflow: hidden; + transition: all 0.3s ease; + cursor: pointer; +} + +.liquid-button::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); + transition: left 0.5s ease; +} + +.liquid-button:hover::before { + left: 100%; +} + +.liquid-button:hover { + box-shadow: var(--glow-lg); + transform: scale(1.05); +} + +/* Neon Text Effects */ +.neon-text { + color: var(--liquid-cyan); + text-shadow: var(--text-glow); + animation: pulse 2s ease-in-out infinite; +} + +/* Animated Borders */ +.animated-border { + position: relative; + border: 1px solid transparent; + background: linear-gradient(var(--glass-bg), var(--glass-bg)) padding-box, + linear-gradient(135deg, var(--liquid-cyan), var(--liquid-turquoise)) border-box; + border-radius: 8px; + animation: borderGlow 2s ease-in-out infinite; +} + +/* Holographic Cards */ +.holographic-card { + background: linear-gradient(135deg, + rgba(0, 255, 255, 0.05) 0%, + rgba(0, 255, 170, 0.05) 25%, + rgba(20, 184, 166, 0.05) 50%, + rgba(0, 221, 255, 0.05) 75%, + rgba(0, 255, 255, 0.05) 100%); + background-size: 400% 400%; + animation: liquidFlow 15s ease infinite; + backdrop-filter: blur(15px); + -webkit-backdrop-filter: blur(15px); + border: 1px solid var(--glass-border); + border-radius: 12px; + box-shadow: var(--glass-shadow); + overflow: hidden; + position: relative; +} + +.holographic-card::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: radial-gradient(circle, rgba(0, 255, 255, 0.1) 0%, transparent 70%); + animation: rotate 10s linear infinite; + pointer-events: none; +} + +@keyframes rotate { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +/* Liquid Input Fields */ +.liquid-input { + background: rgba(0, 255, 255, 0.05); + border: 1px solid rgba(0, 255, 255, 0.2); + color: rgba(255, 255, 255, 0.9); + padding: 8px 12px; + border-radius: 4px; + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + transition: all 0.3s ease; + outline: none; +} + +.liquid-input:focus { + border-color: var(--liquid-cyan); + box-shadow: 0 0 0 2px rgba(0, 255, 255, 0.1), var(--glow-sm); + background: rgba(0, 255, 255, 0.08); +} + +.liquid-input::placeholder { + color: rgba(255, 255, 255, 0.5); +} + +/* Liquid Dropdown */ +.liquid-dropdown { + background: rgba(0, 255, 255, 0.08); + border: 1px solid rgba(0, 255, 255, 0.2); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border-radius: 8px; + box-shadow: var(--glass-shadow); + overflow: hidden; +} + +.liquid-dropdown-item { + padding: 10px 15px; + color: rgba(255, 255, 255, 0.9); + transition: all 0.2s ease; + border-left: 3px solid transparent; +} + +.liquid-dropdown-item:hover { + background: rgba(0, 255, 255, 0.1); + border-left-color: var(--liquid-cyan); + padding-left: 20px; + color: var(--liquid-cyan); +} + +/* Data Grid Enhancement */ +.liquid-table { + background: var(--glass-bg); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: 1px solid var(--glass-border); + border-radius: 8px; + overflow: hidden; +} + +.liquid-table th { + background: rgba(0, 255, 255, 0.08); + color: var(--liquid-cyan); + font-weight: 600; + text-transform: uppercase; + font-size: 0.85em; + letter-spacing: 1px; + padding: 12px; + border-bottom: 1px solid rgba(0, 255, 255, 0.2); +} + +.liquid-table td { + padding: 10px 12px; + color: rgba(255, 255, 255, 0.9); + border-bottom: 1px solid rgba(0, 255, 255, 0.05); +} + +.liquid-table tr:hover { + background: rgba(0, 255, 255, 0.05); +} + +/* Loading Animation */ +@keyframes liquidLoad { + 0% { + transform: rotate(0deg); + box-shadow: 0 0 10px var(--liquid-cyan); + } + 50% { + box-shadow: 0 0 20px var(--liquid-cyan), 0 0 40px var(--liquid-turquoise); + } + 100% { + transform: rotate(360deg); + box-shadow: 0 0 10px var(--liquid-cyan); + } +} + +.liquid-loader { + width: 40px; + height: 40px; + border: 3px solid rgba(0, 255, 255, 0.1); + border-top: 3px solid var(--liquid-cyan); + border-radius: 50%; + animation: liquidLoad 1s linear infinite; +} + +/* Notification Styles */ +.liquid-notification { + background: rgba(0, 255, 255, 0.08); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid var(--liquid-cyan); + border-radius: 8px; + padding: 15px 20px; + color: rgba(255, 255, 255, 0.9); + box-shadow: var(--glow-md); + position: relative; + overflow: hidden; +} + +.liquid-notification::before { + content: ''; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 3px; + background: var(--liquid-cyan); + box-shadow: 0 0 10px var(--liquid-cyan); +} + +/* Sidebar Enhancement */ +.liquid-sidebar { + background: rgba(0, 255, 255, 0.06); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border-right: 1px solid rgba(0, 255, 255, 0.15); + position: relative; +} + +.liquid-sidebar::before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 1px; + height: 100%; + background: linear-gradient(to bottom, + transparent, + var(--liquid-cyan) 50%, + transparent); + animation: pulse 3s ease-in-out infinite; +} + +/* Modal Enhancement */ +.liquid-modal { + background: rgba(0, 0, 0, 0.9); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid var(--glass-border); + border-radius: 12px; + box-shadow: 0 0 50px rgba(0, 255, 255, 0.3); + position: relative; + overflow: hidden; +} + +.liquid-modal::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: radial-gradient(circle at center, + rgba(0, 255, 255, 0.05) 0%, + transparent 70%); + animation: rotate 20s linear infinite; + pointer-events: none; +} + +/* Progress Bar */ +.liquid-progress { + background: rgba(0, 255, 255, 0.1); + border-radius: 10px; + overflow: hidden; + height: 10px; + position: relative; +} + +.liquid-progress-bar { + height: 100%; + background: linear-gradient(90deg, var(--liquid-cyan), var(--liquid-turquoise)); + border-radius: 10px; + position: relative; + overflow: hidden; + animation: pulse 2s ease-in-out infinite; +} + +.liquid-progress-bar::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient(90deg, + transparent, + rgba(255, 255, 255, 0.3), + transparent); + animation: shimmer 2s infinite; +} + +@keyframes shimmer { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +} + +/* Badge Enhancement */ +.liquid-badge { + background: linear-gradient(135deg, var(--liquid-cyan), var(--liquid-turquoise)); + color: #000000; + padding: 2px 8px; + border-radius: 12px; + font-size: 0.75em; + font-weight: 600; + display: inline-flex; + align-items: center; + box-shadow: 0 0 10px rgba(0, 255, 255, 0.3); + animation: pulse 2s ease-in-out infinite; +} + +/* Tooltip Enhancement */ +.liquid-tooltip { + background: rgba(0, 0, 0, 0.95); + border: 1px solid var(--liquid-cyan); + color: rgba(255, 255, 255, 0.95); + padding: 8px 12px; + border-radius: 4px; + box-shadow: var(--glow-md); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + font-size: 0.9em; +} + +.liquid-tooltip::before { + content: ''; + position: absolute; + border-style: solid; + border-width: 5px; + border-color: transparent transparent var(--liquid-cyan) transparent; +} + +/* Scrollbar Styling */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: rgba(0, 255, 255, 0.05); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, var(--liquid-cyan), var(--liquid-turquoise)); + border-radius: 4px; + box-shadow: 0 0 5px rgba(0, 255, 255, 0.3); +} + +::-webkit-scrollbar-thumb:hover { + background: var(--liquid-cyan); + box-shadow: 0 0 10px rgba(0, 255, 255, 0.5); +} + +/* Selection Highlight */ +::selection { + background: rgba(0, 255, 255, 0.3); + color: #ffffff; +} + +::-moz-selection { + background: rgba(0, 255, 255, 0.3); + color: #ffffff; +} \ No newline at end of file diff --git a/public/index.html b/public/index.html index 7721364e..6f8bd9ed 100644 --- a/public/index.html +++ b/public/index.html @@ -24,6 +24,7 @@ H.O.R.N.E.T Storage @@ -48,4 +73,4 @@ - + \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 684d63eb..67f7e65b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -11,26 +11,33 @@ import { useLanguage } from './hooks/useLanguage'; import { useAutoNightMode } from './hooks/useAutoNightMode'; import { usePWA } from './hooks/usePWA'; import { useThemeWatcher } from './hooks/useThemeWatcher'; -import { useAppSelector } from './hooks/reduxHooks'; -import { themeObject } from './styles/themes/themeVariables'; +import { useFullscreenModalFix } from './hooks/useFullscreenModalFix'; // NDK removed - login uses window.nostr directly, profile API uses panel API const App: React.FC = () => { const { language } = useLanguage(); - const theme = useAppSelector((state) => state.theme.theme); usePWA(); useAutoNightMode(); useThemeWatcher(); + + useFullscreenModalFix(); return ( <> - + - + { + // Always use root element for all Ant Design popups to support fullscreen + const root = document.getElementById('root'); + return root || document.body; + }} + > @@ -38,4 +45,4 @@ const App: React.FC = () => { ); }; -export default App; +export default App; \ No newline at end of file diff --git a/src/components/FullscreenDebug.tsx b/src/components/FullscreenDebug.tsx new file mode 100644 index 00000000..34a95590 --- /dev/null +++ b/src/components/FullscreenDebug.tsx @@ -0,0 +1,63 @@ +import React, { useEffect, useState } from 'react'; +import { useFullscreenContainer } from '@app/hooks/useFullscreenContainer'; + +export const FullscreenDebug: React.FC = () => { + const [isFullscreen, setIsFullscreen] = useState(false); + const [fullscreenElement, setFullscreenElement] = useState('none'); + const container = useFullscreenContainer(); + + useEffect(() => { + const checkFullscreen = () => { + const element = document.fullscreenElement || + (document as any).webkitFullscreenElement || + (document as any).mozFullScreenElement || + (document as any).msFullscreenElement; + + setIsFullscreen(!!element); + if (element) { + setFullscreenElement(element.id || element.tagName); + } else { + setFullscreenElement('none'); + } + }; + + checkFullscreen(); + + document.addEventListener('fullscreenchange', checkFullscreen); + document.addEventListener('webkitfullscreenchange', checkFullscreen); + document.addEventListener('mozfullscreenchange', checkFullscreen); + document.addEventListener('msfullscreenchange', checkFullscreen); + + const interval = setInterval(checkFullscreen, 500); + + return () => { + document.removeEventListener('fullscreenchange', checkFullscreen); + document.removeEventListener('webkitfullscreenchange', checkFullscreen); + document.removeEventListener('mozfullscreenchange', checkFullscreen); + document.removeEventListener('msfullscreenchange', checkFullscreen); + clearInterval(interval); + }; + }, []); + + const debugStyle: React.CSSProperties = { + position: 'fixed', + bottom: '10px', + right: '10px', + padding: '10px', + background: 'rgba(0, 0, 0, 0.8)', + color: '#00ff00', + borderRadius: '5px', + zIndex: 2147483647, + fontSize: '12px', + fontFamily: 'monospace' + }; + + return ( +
+
Fullscreen: {isFullscreen ? 'YES' : 'NO'}
+
Element: {fullscreenElement}
+
Container: {container ? container.id || 'element' : 'null'}
+
Root exists: {document.getElementById('root') ? 'YES' : 'NO'}
+
+ ); +}; \ No newline at end of file diff --git a/src/components/allowed-users/components/ModeSelector/ModeSelector.styles.ts b/src/components/allowed-users/components/ModeSelector/ModeSelector.styles.ts index f686bfea..8edfc414 100644 --- a/src/components/allowed-users/components/ModeSelector/ModeSelector.styles.ts +++ b/src/components/allowed-users/components/ModeSelector/ModeSelector.styles.ts @@ -1,7 +1,17 @@ -import styled from 'styled-components'; +import styled, { keyframes } from 'styled-components'; import { Button } from 'antd'; import { media } from '@app/styles/themes/constants'; +/* Liquid shimmer animation - matches SendButton */ +const liquidShimmer = keyframes` + 0% { + background-position: -200% 50%; + } + 100% { + background-position: 200% 50%; + } +`; + export const Container = styled.div` width: 100%; `; @@ -29,21 +39,141 @@ export const ModeButton = styled(Button)` height: 80px; border-radius: 8px; font-weight: 600; - transition: all 0.3s ease; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: center; padding: 8px 16px; - - ${({ $isActive, $color }) => $isActive && ` - background-color: ${$color} !important; - border-color: ${$color} !important; - box-shadow: 0 4px 12px ${$color}33; + position: relative; + overflow: hidden; + + /* Liquid glass styling matching SendButton theme */ + ${({ $isActive }) => $isActive ? ` + background: linear-gradient(to bottom right, + rgba(20, 184, 166, 0.35), /* Active teal */ + rgba(6, 182, 212, 0.30), /* Active cyan */ + rgba(34, 197, 94, 0.35) /* Active green */ + ) !important; + + box-shadow: + inset 0 3px 12px rgba(45, 212, 191, 0.40), + 0 0 40px rgba(6, 182, 212, 0.30), + 0 0 60px rgba(34, 197, 94, 0.25) !important; + + border: 1px solid rgba(45, 212, 191, 0.35) !important; + ` : ` + background: linear-gradient(to bottom right, + rgba(20, 184, 166, 0.15), /* Inactive teal */ + rgba(6, 182, 212, 0.12), /* Inactive cyan */ + rgba(34, 197, 94, 0.15) /* Inactive green */ + ) !important; + + box-shadow: + inset 0 2px 8px rgba(45, 212, 191, 0.20), + 0 0 20px rgba(6, 182, 212, 0.15); + + border: 1px solid rgba(45, 212, 191, 0.20) !important; `} + + color: ${({ $isActive }) => $isActive ? '#ffffff' : 'rgba(220, 252, 231, 0.9)'} !important; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + + /* Glass overlay effect */ + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 50%; + background: linear-gradient( + 180deg, + rgba(255, 255, 255, 0.10) 0%, + transparent 100% + ); + pointer-events: none; + } + + /* Liquid shimmer effect - shows on hover */ + &::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient( + 105deg, + transparent 30%, + rgba(45, 212, 191, 0.20) 45%, + rgba(6, 182, 212, 0.25) 50%, + rgba(34, 197, 94, 0.20) 55%, + transparent 70% + ); + background-size: 200% 100%; + animation: ${liquidShimmer} 3s ease-in-out infinite; + opacity: 0; + transition: opacity 0.3s ease; + pointer-events: none; + } &:hover:not(:disabled) { transform: translateY(-2px); - box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1); + + ${({ $isActive }) => $isActive ? ` + background: linear-gradient(to bottom right, + rgba(20, 184, 166, 0.40), /* Hover active teal */ + rgba(6, 182, 212, 0.35), /* Hover active cyan */ + rgba(34, 197, 94, 0.40) /* Hover active green */ + ) !important; + + box-shadow: + inset 0 4px 15px rgba(45, 212, 191, 0.45), + 0 0 50px rgba(6, 182, 212, 0.35), + 0 0 70px rgba(34, 197, 94, 0.30) !important; + + border-color: rgba(45, 212, 191, 0.45) !important; + ` : ` + background: linear-gradient(to bottom right, + rgba(20, 184, 166, 0.25), /* Hover inactive teal */ + rgba(6, 182, 212, 0.20), /* Hover inactive cyan */ + rgba(34, 197, 94, 0.25) /* Hover inactive green */ + ) !important; + + box-shadow: + inset 0 3px 10px rgba(45, 212, 191, 0.30), + 0 0 35px rgba(6, 182, 212, 0.25), + 0 0 45px rgba(34, 197, 94, 0.20) !important; + + border-color: rgba(45, 212, 191, 0.30) !important; + `} + + &::after { + opacity: 1; + } + } + + &:active { + transform: translateY(0); + } + + &:focus { + outline: none; + box-shadow: + inset 0 2px 10px rgba(45, 212, 191, 0.30), + 0 0 35px rgba(6, 182, 212, 0.25), + 0 0 0 2px rgba(45, 212, 191, 0.35) !important; + } + + /* Disabled state */ + &:disabled { + opacity: 0.5; + cursor: not-allowed; + + &:hover { + transform: none; + } } ${media.md} { @@ -53,14 +183,53 @@ export const ModeButton = styled(Button)` export const ModeDescription = styled.div` padding: 1rem; - background: var(--background-color-secondary); + background: linear-gradient(to bottom right, + rgba(20, 184, 166, 0.08), + rgba(6, 182, 212, 0.06), + rgba(34, 197, 94, 0.08) + ); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); border-radius: 8px; - border: 1px solid var(--border-color-base); + border: 1px solid rgba(45, 212, 191, 0.15); + transition: all 0.3s ease; + position: relative; + overflow: hidden; + + /* Glass overlay effect */ + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 50%; + background: linear-gradient( + 180deg, + rgba(255, 255, 255, 0.05) 0%, + transparent 100% + ); + pointer-events: none; + } + + &:hover { + border-color: rgba(45, 212, 191, 0.25); + box-shadow: + inset 0 2px 8px rgba(45, 212, 191, 0.15), + 0 0 20px rgba(6, 182, 212, 0.15); + background: linear-gradient(to bottom right, + rgba(20, 184, 166, 0.10), + rgba(6, 182, 212, 0.08), + rgba(34, 197, 94, 0.10) + ); + } `; export const DescriptionText = styled.p` margin: 0; - color: var(--text-main-color); + color: rgba(220, 252, 231, 0.95); font-size: 14px; line-height: 1.5; + position: relative; + z-index: 1; `; \ No newline at end of file diff --git a/src/components/allowed-users/components/ModeSelector/ModeSelector.tsx b/src/components/allowed-users/components/ModeSelector/ModeSelector.tsx index d16e6004..e1250846 100644 --- a/src/components/allowed-users/components/ModeSelector/ModeSelector.tsx +++ b/src/components/allowed-users/components/ModeSelector/ModeSelector.tsx @@ -14,13 +14,13 @@ const MODE_INFO = { label: 'Only Me', subtitle: '[Free]', description: 'Personal relay for single user with unlimited access', - color: '#fa541c' + color: '#1890ff' }, 'invite-only': { label: 'Invite Only', subtitle: '[Free]', description: 'Invite-only access with manual NPUB management', - color: '#722ed1' + color: '#1890ff' }, 'public': { label: 'Public Relay', @@ -32,7 +32,7 @@ const MODE_INFO = { label: 'Subscription', subtitle: '[Paid]', description: 'Subscription-based access control', - color: '#52c41a' + color: '#1890ff' } }; diff --git a/src/components/allowed-users/components/NPubManagement/NPubManagement.tsx b/src/components/allowed-users/components/NPubManagement/NPubManagement.tsx index 70951da6..6d2ca4f4 100644 --- a/src/components/allowed-users/components/NPubManagement/NPubManagement.tsx +++ b/src/components/allowed-users/components/NPubManagement/NPubManagement.tsx @@ -1,6 +1,7 @@ import React, { useState } from 'react'; import { Button, Input, Table, Space, Modal, Form, Select, message, Popconfirm } from 'antd'; import { PlusOutlined, DeleteOutlined, EditOutlined } from '@ant-design/icons'; +import { LiquidBlueButton } from '@app/components/common/LiquidBlueButton'; import { useAllowedUsersList, useAllowedUsersValidation } from '@app/hooks/useAllowedUsers'; import { AllowedUsersSettings, AllowedUsersMode, AllowedUser } from '@app/types/allowedUsers.types'; import * as S from './NPubManagement.styles'; @@ -149,13 +150,13 @@ export const NPubManagement: React.FC = ({ - + diff --git a/src/components/allowed-users/components/PermissionsConfig/PermissionsConfig.styles.ts b/src/components/allowed-users/components/PermissionsConfig/PermissionsConfig.styles.ts index 779e4eea..111ed19c 100644 --- a/src/components/allowed-users/components/PermissionsConfig/PermissionsConfig.styles.ts +++ b/src/components/allowed-users/components/PermissionsConfig/PermissionsConfig.styles.ts @@ -101,26 +101,36 @@ export const ForcedSelectWrapper = styled.div<{ $isForced: boolean }>` .ant-select { width: 100%; .ant-select-arrow{ - color: ${(props) => (!props.$isForced ? `var(--text-main-color)` : `var(--text-light-color)`)}; + color: ${(props) => (!props.$isForced ? `rgba(0, 255, 255, 0.7)` : `rgba(0, 255, 255, 0.4)`)}; } .ant-select-selector { - background-color: ${(props) => (props.$isForced ? '#1a1d35' : '#25284B')} !important; - border: ${(props) => (props.$isForced ? '1px solid #434343' : '1px solid #d9d9d9')} !important; - color: ${(props) => (props.$isForced ? '#8c8c8c' : '#d9d9d9')} !important; + background-color: ${(props) => (props.$isForced ? 'rgba(0, 255, 255, 0.02)' : 'rgba(0, 255, 255, 0.04)')} !important; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: ${(props) => (props.$isForced ? '1px solid rgba(0, 255, 255, 0.1)' : '1px solid rgba(0, 255, 255, 0.2)')} !important; + color: ${(props) => (props.$isForced ? 'rgba(255, 255, 255, 0.6)' : 'rgba(255, 255, 255, 0.9)')} !important; + transition: all 0.3s ease; } .ant-select-selection-item { - color: ${(props) => (props.$isForced ? '#8c8c8c' : '#d9d9d9')} !important; + color: ${(props) => (props.$isForced ? 'rgba(255, 255, 255, 0.6)' : 'rgba(255, 255, 255, 0.9)')} !important; + } + + &:not(.ant-select-disabled):hover .ant-select-selector { + border-color: rgba(0, 255, 255, 0.4) !important; + box-shadow: 0 0 10px rgba(0, 255, 255, 0.2); } &.ant-select-disabled { .ant-select-selector { - background-color: ${(props) => (props.$isForced ? '#1a1d35' : '#25284B')} !important; - border: ${(props) => (props.$isForced ? '1px solid #434343' : '1px solid #d9d9d9')} !important; + background-color: ${(props) => (props.$isForced ? 'rgba(0, 255, 255, 0.02)' : 'rgba(0, 255, 255, 0.04)')} !important; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: ${(props) => (props.$isForced ? '1px solid rgba(0, 255, 255, 0.1)' : '1px solid rgba(0, 255, 255, 0.2)')} !important; } .ant-select-selection-item { - color: ${(props) => (props.$isForced ? '#8c8c8c' : '#d9d9d9')} !important; + color: ${(props) => (props.$isForced ? 'rgba(255, 255, 255, 0.6)' : 'rgba(255, 255, 255, 0.9)')} !important; } } } diff --git a/src/components/allowed-users/components/PermissionsConfig/PermissionsConfig.tsx b/src/components/allowed-users/components/PermissionsConfig/PermissionsConfig.tsx index 708c2e7c..74e67c60 100644 --- a/src/components/allowed-users/components/PermissionsConfig/PermissionsConfig.tsx +++ b/src/components/allowed-users/components/PermissionsConfig/PermissionsConfig.tsx @@ -69,9 +69,11 @@ export const PermissionsConfig: React.FC = ({ description={modeConfig.description} type="info" showIcon - style={{ - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + style={{ + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> @@ -80,7 +82,6 @@ export const PermissionsConfig: React.FC = ({ {/* Read Permission */} Read Permission} - help={{isReadForced ? "This permission is automatically set based on the selected mode" : "Who can read from this relay"}} > = ({ description="In only-me mode, only the relay owner can write to this relay. Set your NPUB below to identify yourself as the owner." type="info" showIcon - style={{ + style={{ marginBottom: '1.5rem', - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> diff --git a/src/components/allowed-users/components/TiersConfig/TiersConfig.tsx b/src/components/allowed-users/components/TiersConfig/TiersConfig.tsx index de7c922a..c6a90937 100644 --- a/src/components/allowed-users/components/TiersConfig/TiersConfig.tsx +++ b/src/components/allowed-users/components/TiersConfig/TiersConfig.tsx @@ -1,6 +1,7 @@ import React, { useState } from 'react'; import { Button, Table, Space, Modal, Popconfirm, Alert, Radio, Card } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons'; +import { LiquidBlueButton } from '@app/components/common/LiquidBlueButton'; import { AllowedUsersSettings, AllowedUsersMode, AllowedUsersTier } from '@app/types/allowedUsers.types'; import { TierEditor } from '../TierEditor/TierEditor'; import { displayToFriendlyString, bytesToDisplayFormat } from '@app/utils/tierConversion.utils'; @@ -193,10 +194,12 @@ export const TiersConfig: React.FC = ({ description="All tiers must have a price greater than 0. Free tiers are not allowed in subscription mode." type="warning" showIcon - style={{ + style={{ marginBottom: '1rem', - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> @@ -208,10 +211,12 @@ export const TiersConfig: React.FC = ({ description="Configure free tier storage limits. All tiers will be free (price = 0) in public mode." type="success" showIcon - style={{ + style={{ marginBottom: '1rem', - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> @@ -223,10 +228,12 @@ export const TiersConfig: React.FC = ({ description="Tiers can have any price. Users must be manually added to access lists." type="info" showIcon - style={{ + style={{ marginBottom: '1rem', - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> @@ -238,10 +245,12 @@ export const TiersConfig: React.FC = ({ description="Personal relay configuration. Only your npub can write to this relay." type="info" showIcon - style={{ + style={{ marginBottom: '1rem', - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> @@ -254,14 +263,14 @@ export const TiersConfig: React.FC = ({ 'Subscription Tiers'} {!isOnlyMeMode && ( - + )} @@ -272,10 +281,12 @@ export const TiersConfig: React.FC = ({ description="Choose one tier that will be applied to all free users on your public relay." type="info" showIcon - style={{ + style={{ marginBottom: '1rem', - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> @@ -381,8 +392,10 @@ export const TiersConfig: React.FC = ({ showIcon style={{ marginTop: 16, - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> @@ -395,8 +408,10 @@ export const TiersConfig: React.FC = ({ showIcon style={{ marginTop: 16, - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> @@ -409,8 +424,10 @@ export const TiersConfig: React.FC = ({ showIcon style={{ marginTop: 16, - backgroundColor: '#25284B', - border: '1px solid #d9d9d9', + backgroundColor: 'rgba(0, 255, 255, 0.03)', + backdropFilter: 'blur(10px)', + WebkitBackdropFilter: 'blur(10px)', + border: '1px solid rgba(0, 255, 255, 0.15)', color: '#d9d9d9' }} /> diff --git a/src/components/allowed-users/layouts/AllowedUsersLayout.styles.ts b/src/components/allowed-users/layouts/AllowedUsersLayout.styles.ts index ae683fb0..0eb5a4e1 100644 --- a/src/components/allowed-users/layouts/AllowedUsersLayout.styles.ts +++ b/src/components/allowed-users/layouts/AllowedUsersLayout.styles.ts @@ -4,8 +4,10 @@ import { Card } from 'antd'; export const Container = styled.div` padding: 1.5rem; - max-width: 1200px; + max-width: 100%; + width: 100%; margin: 0 auto; + min-height: calc(100vh - 80px); ${media.md} { padding: 1rem; @@ -53,12 +55,19 @@ export const ErrorContainer = styled.div` export const SaveSection = styled.div` padding: 1.5rem; - background: var(--background-color-secondary); + background: rgba(0, 255, 255, 0.01); + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); border-radius: 8px; - border: 1px solid var(--border-color-base); + border: 1px solid rgba(0, 255, 255, 0.1); display: flex; justify-content: center; align-items: center; + transition: all 0.3s ease; + + &:hover { + border-color: rgba(0, 255, 255, 0.3); + } `; export const ChangesIndicator = styled.span` @@ -67,7 +76,24 @@ export const ChangesIndicator = styled.span` font-style: italic; `; export const ContentCard = styled(Card)` - background: var(--secondary-background-color); - border-color: var(--border-base-color); + background: rgba(0, 255, 255, 0.01); + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + border: 1px solid rgba(0, 255, 255, 0.1); + border-radius: 8px; + transition: all 0.3s ease; + + &:hover { + border-color: rgba(0, 255, 255, 0.3); + transform: translateY(-2px); + } + + .ant-card-head { + background: transparent; + border-bottom: 1px solid rgba(0, 255, 255, 0.08); + } + .ant-card-body { + background: transparent; + } `; \ No newline at end of file diff --git a/src/components/allowed-users/layouts/AllowedUsersLayout.tsx b/src/components/allowed-users/layouts/AllowedUsersLayout.tsx index 76fdfc95..42c00dcc 100644 --- a/src/components/allowed-users/layouts/AllowedUsersLayout.tsx +++ b/src/components/allowed-users/layouts/AllowedUsersLayout.tsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from 'react'; import { Card, Row, Col, Spin, Alert, Button, Space, message } from 'antd'; import { SaveOutlined } from '@ant-design/icons'; +import { LiquidBlueButton } from '@app/components/common/LiquidBlueButton'; import { useAllowedUsersSettings } from '@app/hooks/useAllowedUsers'; import { ModeSelector } from '../components/ModeSelector/ModeSelector'; import { PermissionsConfig } from '../components/PermissionsConfig/PermissionsConfig'; @@ -9,6 +10,12 @@ import { NPubManagement } from '../components/NPubManagement/NPubManagement'; import { RelayOwnerConfig } from '../components/RelayOwnerConfig/RelayOwnerConfig'; import { AllowedUsersMode, MODE_CONFIGURATIONS, AllowedUsersSettings, DEFAULT_TIERS } from '@app/types/allowedUsers.types'; import { getRelayOwner } from '@app/api/allowedUsers.api'; +import { DashboardWrapper } from '@app/pages/DashboardPages/DashboardPage.styles'; +import { BaseRow } from '@app/components/common/BaseRow/BaseRow'; +import { Balance } from '@app/components/relay-dashboard/Balance/Balance'; +import { TotalEarning } from '@app/components/relay-dashboard/totalEarning/TotalEarning'; +import { ActivityStory } from '@app/components/relay-dashboard/transactions/Transactions'; +import * as PageStyles from '@app/pages/uiComponentsPages/UIComponentsPage.styles'; import * as S from './AllowedUsersLayout.styles'; export const AllowedUsersLayout: React.FC = () => { @@ -147,100 +154,122 @@ export const AllowedUsersLayout: React.FC = () => { const showRelayOwnerConfig = currentMode === 'only-me'; return ( - - - H.O.R.N.E.T Allowed Users - Centralized user permission management - - - - - - - - - - - - - - - - {showRelayOwnerConfig && ( - - - - - - )} - - {showTiers && ( - - - - - - )} - - {showNpubManagement && ( - - - - - - )} - - - - - - - {hasChanges && ( - - You have unsaved changes - + + + + + + Allowed Users on Relay + Choose who has access to your nostr relay + + + + + + + + + + + + + + + + {showRelayOwnerConfig && ( + + + + + + )} + + {showTiers && ( + + + + + )} - - - - - + + {showNpubManagement && ( + + + + + + )} + + + + + } + onClick={handleSave} + loading={saving} + disabled={!hasChanges} + > + Save Changes + + + {hasChanges && ( + + You have unsaved changes + + )} + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+
+
+ + ); }; diff --git a/src/components/auth/ForgotPasswordForm/ForgotPasswordForm.styles.ts b/src/components/auth/ForgotPasswordForm/ForgotPasswordForm.styles.ts index 7e72638a..49b5e568 100644 --- a/src/components/auth/ForgotPasswordForm/ForgotPasswordForm.styles.ts +++ b/src/components/auth/ForgotPasswordForm/ForgotPasswordForm.styles.ts @@ -1,12 +1,40 @@ -import styled from 'styled-components'; +import styled, { keyframes } from 'styled-components'; import { FONT_SIZE, FONT_WEIGHT, media } from '@app/styles/themes/constants'; import { BaseButton } from '@app/components/common/BaseButton/BaseButton'; +const fadeIn = keyframes` + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +`; + +const buttonGlow = keyframes` + 0%, 100% { + box-shadow: + 0 4px 15px rgba(0, 255, 255, 0.3), + inset 0 1px 0 rgba(255, 255, 255, 0.2); + } + 50% { + box-shadow: + 0 4px 25px rgba(0, 255, 255, 0.5), + 0 0 40px rgba(0, 255, 255, 0.2), + inset 0 1px 0 rgba(255, 255, 255, 0.3); + } +`; + export const Description = styled.div` margin-bottom: 1.875rem; - color: var(--text-main-color); + color: rgba(255, 255, 255, 0.7); font-size: ${FONT_SIZE.xs}; font-weight: ${FONT_WEIGHT.regular}; + text-align: center; + animation: ${fadeIn} 0.6s ease-out; + line-height: 1.5; @media only screen and ${media.xs} { font-size: ${FONT_SIZE.xxs}; @@ -23,4 +51,61 @@ export const SubmitButton = styled(BaseButton)` width: 100%; margin-top: 1.125rem; margin-bottom: 1rem; -`; + height: 48px; + background: linear-gradient(135deg, #06B6D4 0%, #14B8A6 100%); + border: 1px solid rgba(0, 255, 255, 0.3); + color: white; + text-transform: uppercase; + letter-spacing: 1px; + border-radius: 8px; + position: relative; + overflow: hidden; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + animation: ${buttonGlow} 3s ease-in-out infinite; + + &::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient( + 90deg, + transparent, + rgba(255, 255, 255, 0.2), + transparent + ); + transition: left 0.5s ease; + } + + &:hover:not(:disabled) { + transform: translateY(-2px); + background: linear-gradient(135deg, #00DDFF 0%, #00FFAA 100%); + border-color: rgba(0, 255, 255, 0.6); + color: white; + + &::before { + left: 100%; + } + } + + &:active:not(:disabled) { + transform: translateY(0); + } + + &:disabled { + background: rgba(0, 255, 255, 0.1); + border-color: rgba(0, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.3); + cursor: not-allowed; + animation: none; + } + + &.ant-btn-loading { + &::after { + border-color: rgba(255, 255, 255, 0.3); + border-top-color: white; + } + } +`; \ No newline at end of file diff --git a/src/components/auth/LoginForm/LoginForm.styles.ts b/src/components/auth/LoginForm/LoginForm.styles.ts index eb6c2e04..f04cfe91 100644 --- a/src/components/auth/LoginForm/LoginForm.styles.ts +++ b/src/components/auth/LoginForm/LoginForm.styles.ts @@ -1,14 +1,28 @@ import { FONT_SIZE, FONT_WEIGHT, media } from '@app/styles/themes/constants'; -import styled from 'styled-components'; +import styled, { keyframes } from 'styled-components'; + +const fadeIn = keyframes` + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +`; export const LoginDescription = styled.div` margin-bottom: 1.875rem; - color: var(--text-main-color); + color: rgba(255, 255, 255, 0.7); font-size: ${FONT_SIZE.xs}; + text-align: center; + animation: ${fadeIn} 0.6s ease-out; + line-height: 1.5; @media only screen and ${media.xs} { margin-bottom: 1.5625rem; - font-weight: ${FONT_WEIGHT.bold}; + font-weight: ${FONT_WEIGHT.medium}; } @media only screen and ${media.md} { @@ -22,14 +36,41 @@ export const LoginDescription = styled.div` `; export const RememberMeText = styled.span` - color: var(--primary-color); + color: rgba(0, 255, 255, 0.9); font-size: ${FONT_SIZE.xs}; + transition: color 0.3s ease; + + &:hover { + color: #00FFFF; + } `; export const ForgotPasswordText = styled.span` - color: var(--text-light-color); + color: rgba(0, 255, 255, 0.8); font-size: ${FONT_SIZE.xs}; - text-decoration: underline; + text-decoration: none; + position: relative; + transition: all 0.3s ease; + + &::after { + content: ''; + position: absolute; + bottom: -2px; + left: 0; + width: 0; + height: 1px; + background: #00FFFF; + transition: width 0.3s ease; + } + + &:hover { + color: #00FFFF; + text-shadow: 0 0 8px rgba(0, 255, 255, 0.4); + + &::after { + width: 100%; + } + } `; export const HiddenInput = styled.div` diff --git a/src/components/auth/LoginForm/LoginForm.tsx b/src/components/auth/LoginForm/LoginForm.tsx index 866e1b9b..9d361216 100644 --- a/src/components/auth/LoginForm/LoginForm.tsx +++ b/src/components/auth/LoginForm/LoginForm.tsx @@ -151,12 +151,14 @@ export const LoginForm: React.FC = () => { - - {t('login.noAccount')}{' '} - - {t('common.here')} - + + {t('login.noAccount')} + + + {t('common.createAccount')} + + diff --git a/src/components/auth/SignUpForm/SignUpForm.tsx b/src/components/auth/SignUpForm/SignUpForm.tsx index a21c6095..852a5fad 100644 --- a/src/components/auth/SignUpForm/SignUpForm.tsx +++ b/src/components/auth/SignUpForm/SignUpForm.tsx @@ -55,18 +55,18 @@ export const SignUpForm: React.FC = () => {
{t('common.signUp')} - + - + - - - + { ]} > - - + + {t('common.signUp')} - + - - {t('signup.alreadyHaveAccount')}{' '} - - {t('common.here')} - + + {t('signup.alreadyHaveAccount')} + + + {t('common.login')} + +
diff --git a/src/components/blocked-pubkeys/BlockedPubkeys.styles.ts b/src/components/blocked-pubkeys/BlockedPubkeys.styles.ts index 0bdb5696..50370e02 100644 --- a/src/components/blocked-pubkeys/BlockedPubkeys.styles.ts +++ b/src/components/blocked-pubkeys/BlockedPubkeys.styles.ts @@ -2,12 +2,9 @@ import styled from 'styled-components'; import Card from 'antd/lib/card/Card'; import { Input } from 'antd'; import { BaseCol } from '../common/BaseCol/BaseCol'; -export const InputRoot = styled(Input)` - background-color: var(--layout-sider-bg-color); - & input { - background-color: var(--layout-sider-bg-color); - } -`; + +/* Let global styles handle the search input - no custom overrides needed */ +export const InputRoot = styled(Input)``; export const BaseColRoot = styled(BaseCol)` overflow: auto; border-radius: 8px; diff --git a/src/components/blocked-pubkeys/BlockedPubkeys.tsx b/src/components/blocked-pubkeys/BlockedPubkeys.tsx index 70ddbb2e..08bedcbc 100644 --- a/src/components/blocked-pubkeys/BlockedPubkeys.tsx +++ b/src/components/blocked-pubkeys/BlockedPubkeys.tsx @@ -9,6 +9,13 @@ import { BlockPubkeyForm } from './components/BlockPubkeyForm'; import { useModerationStats } from '@app/hooks/useModerationStats'; import { LockFilled } from '@ant-design/icons'; import styled from 'styled-components'; +import { DashboardWrapper } from '@app/pages/DashboardPages/DashboardPage.styles'; +import { BaseRow } from '@app/components/common/BaseRow/BaseRow'; +import { PageTitle } from '@app/components/common/PageTitle/PageTitle'; +import { Balance } from '@app/components/relay-dashboard/Balance/Balance'; +import { TotalEarning } from '@app/components/relay-dashboard/totalEarning/TotalEarning'; +import { ActivityStory } from '@app/components/relay-dashboard/transactions/Transactions'; +import * as PageStyles from '@app/pages/uiComponentsPages/UIComponentsPage.styles'; import * as S from './BlockedPubkeys.styles'; const { Title, Text } = Typography; @@ -49,41 +56,64 @@ export const BlockedPubkeys: React.FC = () => { }; return ( - - - -
-
- - Access Control <LockFilled /> - - - Control access to your relay and manage flagged pubkeys - -
- } onClick={handleRefresh} loading={loading || statsLoading}> - Refresh - -
+ + Content Moderation + + + + + +
+
+ + Content Moderation <LockFilled /> + + + Control access to your relay and manage flagged pubkeys + +
+ } onClick={handleRefresh} loading={loading || statsLoading}> + Refresh + +
+ + {activeView === 'blocked' && } - {activeView === 'blocked' && } + + setActiveView('blocked')}> + Blocked Access + + setActiveView('flagged')}> + Flagged Access + + - - setActiveView('blocked')}> - Blocked Access - - setActiveView('flagged')}> - Flagged Access - - + {activeView === 'blocked' ? ( + + ) : ( + + )} +
+
+
+
- {activeView === 'blocked' ? ( - - ) : ( - - )} -
-
-
+ + +
+ +
+ +
+ +
+ +
+ +
+
+
+ + ); }; diff --git a/src/components/blocked-pubkeys/components/BlockPubkeyForm.tsx b/src/components/blocked-pubkeys/components/BlockPubkeyForm.tsx index 5fcabead..625ed0ab 100644 --- a/src/components/blocked-pubkeys/components/BlockPubkeyForm.tsx +++ b/src/components/blocked-pubkeys/components/BlockPubkeyForm.tsx @@ -1,8 +1,9 @@ import React, { useState } from 'react'; -import { Form, Input, Button, Card } from 'antd'; +import { Form, Input, Card } from 'antd'; import { PlusOutlined } from '@ant-design/icons'; import styled from 'styled-components'; import { BREAKPOINTS } from '@app/styles/themes/constants'; +import { LiquidBlueButton } from '@app/components/common/LiquidBlueButton'; interface BlockPubkeyFormProps { onSubmit: (pubkey: string, reason?: string) => Promise; @@ -17,7 +18,12 @@ const CardRoot = styled(Card)` & .ant-card-head { border-bottom-color: var(--border-base-color) !important; } -} + + /* Remove the card body padding and background */ + & .ant-card-body { + padding: 0 !important; + background: transparent !important; + } `; const TextArea = styled(Input.TextArea)` background-color: var(--layout-sider-bg-color) !important; @@ -25,12 +31,6 @@ const TextArea = styled(Input.TextArea)` const InputArea = styled(Input)` background-color: var(--layout-sider-bg-color) !important; `; -export const FormItemContainer = styled.div` - width: 100%; - @media screen and (min-width: ${BREAKPOINTS.md}px) { - padding-right: 1.5rem; - } -`; export const BlockPubkeyForm: React.FC = ({ onSubmit, disabled }) => { const [form] = Form.useForm(); @@ -59,25 +59,36 @@ export const BlockPubkeyForm: React.FC = ({ onSubmit, disa return ( -
- - - - - +
+
+ + form.setFieldsValue({ pubkey: e.target.value })} + /> +
- - -