mirror of
https://github.com/davila7/claude-code-templates.git
synced 2026-09-19 01:30:23 +08:00
746a8e2c18
* feat: Complete dashboard UI overhaul with dark mode theme system - Added ThemeToggle component with persistent theme switching - Implemented comprehensive dark mode styles across all dashboard pages - Enhanced UI components: Sidebar, TopBar, ComponentGrid, TrendingView, JobsView - Improved modal designs: SearchModal, SendToRepoModal, CartSidebar - Updated featured pages and component detail pages with dark mode support - Added CountryFlag component for jobs display - Refined typography, spacing, and color schemes for better readability - Enhanced interactive elements with smooth transitions and hover states - Updated global styles with CSS variables for theme consistency * docs: Add comprehensive PR documentation and screenshot guide * docs: Transform PR into compelling business-focused summary - Emphasize user benefits and platform value - Highlight featured partner improvements (Neon, Vercel, Supabase, etc.) - Detail expected business impact and metrics - Add comprehensive business value section - Include strategic benefits and revenue impact - Professional acknowledgments from BitreonX team - Focus on quality and attention to detail * docs: Add executive summary highlighting business value and BitreonX quality * docs: Add quick reference card for easy PR creation * fix: resolve remaining P2 issues - sidebar active state, cart height, and date format - Fix Sidebar.astro active-state icon styling to target nested span element - Fix CartSidebar.tsx scrollable content height to be dynamic based on footer - Fix WeWorkRemotely date format from RFC-2822 to ISO 8601 for proper sorting * fix: use flexbox layout for CartSidebar instead of absolute positioning Replace hard-coded height calculations with proper flexbox layout: - Add flex-col to sidebar panel container - Make header and footer shrink-0 (fixed size) - Make content flex-1 with min-h-0 (fills remaining space) - Remove absolute positioning from footer - Remove hard-coded viewport height calculations This ensures the scrollable content area dynamically adjusts to the actual footer height without items being obscured. * fix: resolve 11 additional P2 code review issues - Fix malformed Tailwind classes in featured/[slug].astro (hover border syntax) - Fix malformed Tailwind classes in MyComponentsView and SaveToCollectionButton - Fix tooltip initialization non-idempotency in Sidebar (prevent duplicate listeners) - Fix Recently Added sort mislabeling in ComponentGrid - Fix single/multi-category filter conflict in ComponentGrid - Fix tag click event bubbling in JobsView - Fix SearchModal MutationObserver and timer cleanup - Fix logo visibility issue in JobsView - Fix fallback color construction in TrendingView - Fix theme.ts localStorage trust issue with runtime validation - Fix missing width/height in icon SVGs - Fix XSS vulnerability in component detail page (use textContent) - Fix sidebar overflow-x clipping tooltips * fix: resolve SearchModal timeout race condition and Recently Added sort mismatch - Fix SearchModal closeModal timeout cleanup using ref to prevent race conditions when modal is closed and reopened quickly - Fix Recently Added sort to use reverse name sort (Z-A) instead of downloads, providing distinct behavior from Most Popular until actual date field is available * fix: Remove misleading 'Recently Added' sort option The 'Recently Added' sort was using reverse alphabetical order as a placeholder, which is misleading to users expecting actual recency. Since component data doesn't include creation dates, removed this option entirely. Fixes violation P2 in PR #451
437 lines
9.8 KiB
CSS
437 lines
9.8 KiB
CSS
/* Featured Page Styles - Extends component-page.css */
|
|
|
|
/* ===== DARK MODE (Default) ===== */
|
|
:root,
|
|
html.dark {
|
|
--featured-bg-primary: #0f0f0f;
|
|
--featured-bg-secondary: #1a1a1a;
|
|
--featured-bg-tertiary: #232323;
|
|
--featured-border: rgba(255, 255, 255, 0.08);
|
|
--featured-border-hover: rgba(255, 255, 255, 0.15);
|
|
--featured-text-primary: #f5f5f5;
|
|
--featured-text-secondary: #a3a3a3;
|
|
--featured-text-tertiary: #737373;
|
|
--featured-code-bg: #1a1a1a;
|
|
--featured-card-hover: #232323;
|
|
}
|
|
|
|
/* ===== LIGHT MODE ===== */
|
|
html.light {
|
|
--featured-bg-primary: #ffffff;
|
|
--featured-bg-secondary: #fafafa;
|
|
--featured-bg-tertiary: #f5f5f5;
|
|
--featured-border: #e5e5e5;
|
|
--featured-border-hover: #d4d4d4;
|
|
--featured-text-primary: #0f0f0f;
|
|
--featured-text-secondary: #525252;
|
|
--featured-text-tertiary: #8a8a8a;
|
|
--featured-code-bg: #f5f5f5;
|
|
--featured-card-hover: #fafafa;
|
|
}
|
|
|
|
/* Featured Logo in Header */
|
|
.featured-logo {
|
|
text-align: center;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.featured-logo img {
|
|
max-width: 280px;
|
|
width: 100%;
|
|
height: auto;
|
|
}
|
|
|
|
/* Partner Badge - Color variants for featured type */
|
|
.partner-badge {
|
|
background: linear-gradient(135deg, #6366f1 0%, #818cf8 100%);
|
|
color: #ffffff;
|
|
padding: 0.35rem 0.8rem;
|
|
border-radius: 16px;
|
|
font-size: 0.7rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.5px;
|
|
text-transform: uppercase;
|
|
display: inline-block;
|
|
position: relative;
|
|
z-index: 1;
|
|
box-shadow:
|
|
0 2px 8px rgba(99, 102, 241, 0.3),
|
|
0 4px 16px rgba(99, 102, 241, 0.15),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.2);
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.partner-badge:hover {
|
|
transform: translateY(-1px) scale(1.02);
|
|
filter: brightness(1.1);
|
|
}
|
|
|
|
.partner-badge::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, transparent 50%);
|
|
border-radius: 16px;
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* Partner badge color variants */
|
|
.partner-badge--partner {
|
|
background: linear-gradient(135deg, #6366f1 0%, #818cf8 100%);
|
|
box-shadow:
|
|
0 2px 8px rgba(99, 102, 241, 0.3),
|
|
0 4px 16px rgba(99, 102, 241, 0.15),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
.partner-badge--database {
|
|
background: linear-gradient(135deg, #059669 0%, #34d399 100%);
|
|
box-shadow:
|
|
0 2px 8px rgba(5, 150, 105, 0.3),
|
|
0 4px 16px rgba(5, 150, 105, 0.15),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
.partner-badge--toolkit {
|
|
background: linear-gradient(135deg, #d97706 0%, #fbbf24 100%);
|
|
box-shadow:
|
|
0 2px 8px rgba(217, 119, 6, 0.3),
|
|
0 4px 16px rgba(217, 119, 6, 0.15),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
/* External CTA Button in Sidebar */
|
|
.sidebar-cta-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 0.5rem;
|
|
width: 100%;
|
|
padding: 0.75rem 1rem;
|
|
background: var(--accent-color);
|
|
color: #ffffff;
|
|
text-decoration: none;
|
|
border: none;
|
|
border-radius: 8px;
|
|
font-size: 0.9rem;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
}
|
|
|
|
.sidebar-cta-btn:hover {
|
|
background: var(--text-accent);
|
|
color: #ffffff;
|
|
transform: translateY(-1px);
|
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
|
|
}
|
|
|
|
.sidebar-cta-btn svg {
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
/* Featured Article Content in Overview Tab */
|
|
.featured-content {
|
|
color: var(--featured-text-secondary);
|
|
line-height: 1.7;
|
|
}
|
|
|
|
.featured-content h2 {
|
|
font-size: 1.5rem;
|
|
font-weight: 600;
|
|
color: var(--featured-text-primary);
|
|
margin-top: 2.5rem;
|
|
margin-bottom: 1rem;
|
|
padding-bottom: 0.5rem;
|
|
border-bottom: 2px solid var(--accent-color);
|
|
display: inline-block;
|
|
}
|
|
|
|
.featured-content h2:first-child {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.featured-content h3 {
|
|
font-size: 1.2rem;
|
|
font-weight: 600;
|
|
color: var(--featured-text-primary);
|
|
margin-top: 1.8rem;
|
|
margin-bottom: 0.75rem;
|
|
}
|
|
|
|
.featured-content p {
|
|
font-size: 1rem;
|
|
line-height: 1.7;
|
|
color: var(--featured-text-secondary);
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.featured-content ul,
|
|
.featured-content ol {
|
|
margin: 1rem 0;
|
|
padding-left: 1.5rem;
|
|
color: var(--featured-text-secondary);
|
|
}
|
|
|
|
.featured-content li {
|
|
margin-bottom: 0.5rem;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.featured-content strong {
|
|
color: var(--featured-text-primary);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.featured-content a {
|
|
color: var(--accent-color);
|
|
text-decoration: none;
|
|
transition: opacity 0.2s ease;
|
|
}
|
|
|
|
.featured-content a:hover {
|
|
text-decoration: underline;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.featured-content code {
|
|
background: var(--featured-code-bg);
|
|
padding: 0.2rem 0.5rem;
|
|
border-radius: 4px;
|
|
font-size: 0.9rem;
|
|
color: var(--accent-color);
|
|
font-family: 'Monaco', 'Menlo', 'Geist Mono', monospace;
|
|
border: 1px solid var(--featured-border);
|
|
}
|
|
|
|
.featured-content pre {
|
|
background: var(--featured-bg-secondary);
|
|
border: 1px solid var(--featured-border);
|
|
border-radius: 8px;
|
|
padding: 1.25rem;
|
|
margin: 1.5rem 0;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.featured-content pre code {
|
|
background: none;
|
|
padding: 0;
|
|
font-size: 0.85rem;
|
|
color: var(--featured-text-primary);
|
|
line-height: 1.6;
|
|
border: none;
|
|
}
|
|
|
|
.featured-content blockquote {
|
|
background: var(--featured-bg-tertiary);
|
|
border-left: 3px solid var(--accent-color);
|
|
padding: 1rem 1.5rem;
|
|
margin: 1.5rem 0;
|
|
border-radius: 0 8px 8px 0;
|
|
color: var(--featured-text-secondary);
|
|
}
|
|
|
|
.featured-content blockquote p {
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.featured-content blockquote p:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
/* Feature List Cards */
|
|
.featured-content .feature-list {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1rem;
|
|
margin: 1.5rem 0;
|
|
}
|
|
|
|
.featured-content .feature-item {
|
|
display: flex;
|
|
gap: 1rem;
|
|
padding: 1.25rem;
|
|
background: var(--featured-bg-secondary);
|
|
border: 1px solid var(--featured-border);
|
|
border-radius: 8px;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.featured-content .feature-item:hover {
|
|
transform: translateX(4px);
|
|
border-color: var(--featured-border-hover);
|
|
background: var(--featured-card-hover);
|
|
}
|
|
|
|
.featured-content .feature-icon {
|
|
font-size: 1.5rem;
|
|
flex-shrink: 0;
|
|
width: 2.5rem;
|
|
height: 2.5rem;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: var(--featured-bg-tertiary);
|
|
border-radius: 8px;
|
|
color: var(--accent-color);
|
|
font-weight: 700;
|
|
border: 1px solid var(--featured-border);
|
|
}
|
|
|
|
.featured-content .feature-content h3 {
|
|
margin: 0 0 0.5rem 0;
|
|
color: var(--featured-text-primary);
|
|
font-size: 1.05rem;
|
|
border-bottom: none;
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
.featured-content .feature-content p {
|
|
margin: 0;
|
|
font-size: 0.95rem;
|
|
color: var(--featured-text-secondary);
|
|
}
|
|
|
|
/* Comparison Box */
|
|
.featured-content .comparison-box {
|
|
background: var(--featured-bg-secondary);
|
|
border: 1px solid var(--featured-border);
|
|
border-radius: 8px;
|
|
padding: 1.25rem;
|
|
margin: 1.5rem 0;
|
|
}
|
|
|
|
.featured-content .comparison-item {
|
|
padding: 0.75rem 0;
|
|
border-bottom: 1px solid var(--featured-border);
|
|
}
|
|
|
|
.featured-content .comparison-item:last-child {
|
|
border-bottom: none;
|
|
}
|
|
|
|
.featured-content .comparison-item strong {
|
|
color: var(--accent-color);
|
|
}
|
|
|
|
/* Info Note */
|
|
.featured-content .info-note {
|
|
background: var(--featured-bg-secondary);
|
|
border-left: 3px solid var(--accent-color);
|
|
padding: 1rem 1.5rem;
|
|
margin: 1.5rem 0;
|
|
font-style: italic;
|
|
border-radius: 0 8px 8px 0;
|
|
color: var(--featured-text-secondary);
|
|
}
|
|
|
|
/* CTA Box */
|
|
.featured-content .cta-box {
|
|
background: var(--featured-bg-secondary);
|
|
border: 1px solid var(--featured-border);
|
|
border-radius: 8px;
|
|
padding: 1.25rem;
|
|
margin: 1.5rem 0;
|
|
}
|
|
|
|
/* Website Tab iframe */
|
|
.featured-website-frame {
|
|
width: 100%;
|
|
min-height: 600px;
|
|
border: 1px solid var(--featured-border);
|
|
border-radius: 8px;
|
|
background: #fff;
|
|
}
|
|
|
|
.website-tab-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 1rem;
|
|
padding: 0.75rem 1rem;
|
|
background: var(--featured-bg-secondary);
|
|
border: 1px solid var(--featured-border);
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.website-tab-url {
|
|
color: var(--featured-text-secondary);
|
|
font-size: 0.85rem;
|
|
font-family: 'Monaco', 'Menlo', 'Geist Mono', monospace;
|
|
}
|
|
|
|
.website-tab-open {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.4rem;
|
|
color: var(--accent-color);
|
|
text-decoration: none;
|
|
font-size: 0.85rem;
|
|
font-weight: 500;
|
|
transition: opacity 0.2s ease;
|
|
}
|
|
|
|
.website-tab-open:hover {
|
|
text-decoration: underline;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
/* Partner Info Card in Sidebar */
|
|
.partner-info-card {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 0.75rem;
|
|
text-align: center;
|
|
}
|
|
|
|
.partner-info-card img {
|
|
max-width: 180px;
|
|
width: 100%;
|
|
height: auto;
|
|
}
|
|
|
|
.partner-info-description {
|
|
font-size: 0.85rem;
|
|
color: var(--featured-text-secondary);
|
|
line-height: 1.5;
|
|
}
|
|
|
|
/* Responsive */
|
|
@media (max-width: 768px) {
|
|
.featured-content .feature-item {
|
|
flex-direction: column;
|
|
}
|
|
|
|
.featured-content .feature-icon {
|
|
font-size: 1.2rem;
|
|
width: 2rem;
|
|
height: 2rem;
|
|
}
|
|
|
|
.featured-logo img {
|
|
max-width: 200px;
|
|
}
|
|
|
|
.featured-website-frame {
|
|
min-height: 400px;
|
|
}
|
|
}
|
|
|
|
/* Smooth transitions for theme switching */
|
|
.featured-content,
|
|
.featured-content *,
|
|
.feature-item,
|
|
.comparison-box,
|
|
.info-note,
|
|
.cta-box,
|
|
.website-tab-header {
|
|
transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease;
|
|
}
|