/** * PortfolioJournal - Apple-inspired Design System * Clean, minimal, accessible */ /* ======================================== CSS Custom Properties (Design Tokens) ======================================== */ :root { /* Colors - Light Mode */ --color-bg: #ffffff; --color-bg-secondary: #f5f5f7; --color-bg-tertiary: #fafafa; --color-surface: #ffffff; --color-surface-elevated: #ffffff; --color-text: #1d1d1f; --color-text-secondary: #6e6e73; --color-text-tertiary: #86868b; --color-primary: #4b7bf2; --color-primary-hover: #3f6fe6; --color-primary-active: #3563d9; --color-accent: #58b77a; --color-accent-secondary: #e9a23b; --color-warning: #ff9500; --color-error: #ff3b30; --color-border: rgba(0, 0, 0, 0.08); --color-border-strong: rgba(0, 0, 0, 0.12); --color-divider: rgba(0, 0, 0, 0.06); /* Gradients */ --gradient-hero: linear-gradient(180deg, #f5f5f7 0%, #ffffff 100%); --gradient-card: linear-gradient(145deg, #ffffff 0%, #fafafa 100%); --gradient-accent: linear-gradient(135deg, #4b7bf2 0%, #58b77a 100%); --gradient-blob-1: radial-gradient(circle at 30% 20%, rgba(75, 123, 242, 0.12) 0%, transparent 50%); --gradient-blob-2: radial-gradient(circle at 70% 80%, rgba(233, 162, 59, 0.1) 0%, transparent 50%); /* Shadows */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08); --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12); --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.16); --shadow-card: 0 2px 8px rgba(0, 0, 0, 0.06), 0 0 1px rgba(0, 0, 0, 0.08); --shadow-card-hover: 0 8px 24px rgba(0, 0, 0, 0.1), 0 0 1px rgba(0, 0, 0, 0.1); /* Typography */ --font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Helvetica Neue', Helvetica, Arial, sans-serif; --font-mono: 'SF Mono', SFMono-Regular, ui-monospace, Menlo, Monaco, 'Cascadia Code', monospace; --font-size-xs: 0.75rem; --font-size-sm: 0.875rem; --font-size-base: 1rem; --font-size-lg: 1.125rem; --font-size-xl: 1.25rem; --font-size-2xl: 1.5rem; --font-size-3xl: 2rem; --font-size-4xl: 2.5rem; --font-size-5xl: 3rem; --font-size-6xl: 3.5rem; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --line-height-tight: 1.1; --line-height-snug: 1.25; --line-height-normal: 1.5; --line-height-relaxed: 1.625; --letter-spacing-tight: -0.025em; --letter-spacing-normal: 0; --letter-spacing-wide: 0.025em; /* Spacing */ --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem; --space-12: 3rem; --space-16: 4rem; --space-20: 5rem; --space-24: 6rem; --space-32: 8rem; /* Border Radius */ --radius-sm: 6px; --radius-md: 10px; --radius-lg: 14px; --radius-xl: 20px; --radius-2xl: 28px; --radius-full: 9999px; /* Transitions */ --transition-fast: 150ms ease; --transition-base: 250ms ease; --transition-slow: 350ms ease; --transition-bounce: 350ms cubic-bezier(0.34, 1.56, 0.64, 1); /* Z-index */ --z-dropdown: 100; --z-sticky: 200; --z-modal: 300; --z-toast: 400; /* Layout */ --max-width-content: 980px; --max-width-text: 680px; --nav-height: 52px; } /* Dark Mode */ [data-theme="dark"] { --color-bg: #000000; --color-bg-secondary: #1c1c1e; --color-bg-tertiary: #2c2c2e; --color-surface: #1c1c1e; --color-surface-elevated: #2c2c2e; --color-text: #f5f5f7; --color-text-secondary: #a1a1a6; --color-text-tertiary: #8e8e93; --color-primary: #6f93ff; --color-primary-hover: #82a2ff; --color-primary-active: #5a7fe6; --color-accent: #72d39a; --color-accent-secondary: #ffb54d; --color-border: rgba(255, 255, 255, 0.1); --color-border-strong: rgba(255, 255, 255, 0.16); --color-divider: rgba(255, 255, 255, 0.08); --gradient-hero: linear-gradient(180deg, #1c1c1e 0%, #000000 100%); --gradient-card: linear-gradient(145deg, #2c2c2e 0%, #1c1c1e 100%); --gradient-blob-1: radial-gradient(circle at 30% 20%, rgba(111, 147, 255, 0.16) 0%, transparent 50%); --gradient-blob-2: radial-gradient(circle at 70% 80%, rgba(255, 181, 77, 0.12) 0%, transparent 50%); --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4); --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5); --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.6); --shadow-card: 0 2px 8px rgba(0, 0, 0, 0.3), 0 0 1px rgba(255, 255, 255, 0.05); --shadow-card-hover: 0 8px 24px rgba(0, 0, 0, 0.4), 0 0 1px rgba(255, 255, 255, 0.08); } /* ======================================== Reset & Base Styles ======================================== */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; scroll-behavior: smooth; } body { font-family: var(--font-sans); font-size: var(--font-size-base); font-weight: var(--font-weight-normal); line-height: var(--line-height-normal); color: var(--color-text); background-color: var(--color-bg); min-height: 100vh; overflow-x: hidden; } /* Background blobs */ body::before, body::after { content: ''; position: fixed; inset: 0; pointer-events: none; z-index: -1; } body::before { background: var(--gradient-blob-1); } body::after { background: var(--gradient-blob-2); } img, picture, video, canvas, svg { display: block; max-width: 100%; } a { color: var(--color-primary); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: var(--color-primary-hover); } a:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; border-radius: var(--radius-sm); } ul, ol { list-style: none; } button { font-family: inherit; font-size: inherit; cursor: pointer; border: none; background: none; } button:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; border-radius: var(--radius-sm); } input, textarea, select { font-family: inherit; font-size: inherit; } /* Selection */ ::selection { background-color: var(--color-primary); color: white; } /* ======================================== Typography ======================================== */ h1, h2, h3, h4, h5, h6 { font-weight: var(--font-weight-semibold); line-height: var(--line-height-tight); letter-spacing: var(--letter-spacing-tight); color: var(--color-text); } h1 { font-size: var(--font-size-5xl); font-weight: var(--font-weight-bold); } h2 { font-size: var(--font-size-4xl); } h3 { font-size: var(--font-size-2xl); } h4 { font-size: var(--font-size-xl); } h5 { font-size: var(--font-size-lg); } h6 { font-size: var(--font-size-base); } p { color: var(--color-text-secondary); line-height: var(--line-height-relaxed); } .text-sm { font-size: var(--font-size-sm); } .text-lg { font-size: var(--font-size-lg); } .text-center { text-align: center; } .text-secondary { color: var(--color-text-secondary); } .text-tertiary { color: var(--color-text-tertiary); } /* ======================================== Layout ======================================== */ .container { width: 100%; max-width: var(--max-width-content); margin: 0 auto; padding: 0 var(--space-6); } .container-narrow { max-width: var(--max-width-text); } .section { padding: var(--space-20) 0; } .section-lg { padding: var(--space-24) 0; } @media (max-width: 768px) { .section { padding: var(--space-12) 0; } .section-lg { padding: var(--space-16) 0; } } /* ======================================== Navigation ======================================== */ .nav { position: fixed; top: 0; left: 0; right: 0; height: var(--nav-height); background: rgba(255, 255, 255, 0.72); backdrop-filter: saturate(180%) blur(20px); -webkit-backdrop-filter: saturate(180%) blur(20px); border-bottom: 1px solid var(--color-border); z-index: var(--z-sticky); } [data-theme="dark"] .nav { background: rgba(29, 29, 31, 0.72); } .nav-inner { display: flex; align-items: center; justify-content: space-between; height: 100%; max-width: var(--max-width-content); margin: 0 auto; padding: 0 var(--space-6); } .nav-logo { display: flex; align-items: center; gap: var(--space-3); font-weight: var(--font-weight-semibold); font-size: var(--font-size-lg); color: var(--color-text); } .nav-logo:hover { color: var(--color-text); } .nav-logo svg, .nav-logo img { width: 28px; height: 28px; } .nav-links { display: flex; align-items: center; gap: var(--space-1); } .nav-link { padding: var(--space-2) var(--space-4); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); color: var(--color-text-secondary); border-radius: var(--radius-full); transition: all var(--transition-fast); } .nav-link:hover { color: var(--color-text); background: var(--color-bg-secondary); } .nav-link.active { color: var(--color-text); } .nav-actions { display: flex; align-items: center; gap: var(--space-2); } .theme-toggle { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; color: var(--color-text-secondary); border-radius: var(--radius-full); transition: all var(--transition-fast); } .theme-toggle:hover { color: var(--color-text); background: var(--color-bg-secondary); } .mobile-menu-toggle { display: none; align-items: center; justify-content: center; width: 36px; height: 36px; color: var(--color-text-secondary); border-radius: var(--radius-full); } @media (max-width: 768px) { .nav-links { position: fixed; top: var(--nav-height); left: 0; right: 0; flex-direction: column; padding: var(--space-4); background: var(--color-bg); border-bottom: 1px solid var(--color-border); transform: translateY(-100%); opacity: 0; visibility: hidden; transition: all var(--transition-base); } .nav-links.open { transform: translateY(0); opacity: 1; visibility: visible; } .nav-link { width: 100%; padding: var(--space-3) var(--space-4); text-align: center; } .mobile-menu-toggle { display: flex; } } /* ======================================== Buttons ======================================== */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2); padding: var(--space-3) var(--space-6); font-size: var(--font-size-base); font-weight: var(--font-weight-medium); line-height: 1; border-radius: var(--radius-full); transition: all var(--transition-fast); white-space: nowrap; } .btn-primary { background: var(--color-primary); color: white; } .btn-primary:hover { background: var(--color-primary-hover); color: white; transform: translateY(-1px); } .btn-primary:active { background: var(--color-primary-active); transform: translateY(0); } .btn-secondary { background: var(--color-bg-secondary); color: var(--color-text); } .btn-secondary:hover { background: var(--color-bg-tertiary); color: var(--color-text); } [data-theme="dark"] .btn-secondary { background: var(--color-surface); } [data-theme="dark"] .btn-secondary:hover { background: var(--color-surface-elevated); } .btn-outline { background: transparent; color: var(--color-primary); border: 1px solid var(--color-primary); } .btn-outline:hover { background: var(--color-primary); color: white; } .btn-lg { padding: var(--space-4) var(--space-8); font-size: var(--font-size-lg); } .btn-small { padding: var(--space-2) var(--space-4); font-size: var(--font-size-sm); } .btn-icon { width: 44px; height: 44px; padding: 0; } /* App Store Button */ .btn-appstore { display: inline-flex; align-items: center; gap: var(--space-3); padding: var(--space-3) var(--space-5); background: var(--color-text); color: var(--color-bg); border-radius: var(--radius-md); transition: all var(--transition-fast); } .btn-appstore:hover { opacity: 0.9; color: var(--color-bg); transform: translateY(-1px); } .btn-appstore svg { width: 24px; height: 24px; } .btn-appstore-text { display: flex; flex-direction: column; align-items: flex-start; text-align: left; } .btn-appstore-text span:first-child { font-size: var(--font-size-xs); opacity: 0.8; } .btn-appstore-text span:last-child { font-size: var(--font-size-base); font-weight: var(--font-weight-semibold); } /* ======================================== Hero Section ======================================== */ .hero { min-height: 100vh; display: flex; align-items: center; padding-top: calc(var(--nav-height) + var(--space-12)); padding-bottom: var(--space-12); background: var(--gradient-hero); } .hero-content { text-align: center; max-width: 720px; margin: 0 auto; } .hero-badge { display: inline-flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-4); margin-bottom: var(--space-6); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); color: var(--color-text-secondary); background: var(--color-bg-secondary); border-radius: var(--radius-full); } .hero-badge svg { width: 16px; height: 16px; } .hero-title { font-size: clamp(2.5rem, 8vw, 4.5rem); font-weight: var(--font-weight-bold); line-height: 1.05; letter-spacing: -0.03em; margin-bottom: var(--space-6); } .hero-title-gradient { background: var(--gradient-accent); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .hero-description { font-size: var(--font-size-xl); color: var(--color-text-secondary); max-width: 540px; margin: 0 auto var(--space-10); line-height: var(--line-height-relaxed); } .hero-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--space-4); } .hero-app-icon { width: 120px; height: 120px; margin: 0 auto var(--space-8); border-radius: var(--radius-2xl); background: var(--color-surface); border: 1px solid var(--color-border); box-shadow: var(--shadow-lg); display: flex; align-items: center; justify-content: center; } .hero-app-icon img, .hero-app-icon svg { width: 60px; height: 60px; color: white; } /* ======================================== Features Section ======================================== */ .features { background: var(--color-bg); } .features-header { text-align: center; max-width: 600px; margin: 0 auto var(--space-16); } .features-header h2 { margin-bottom: var(--space-4); } .features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-6); } @media (max-width: 968px) { .features-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 640px) { .features-grid { grid-template-columns: 1fr; } } .feature-card { padding: var(--space-8); background: var(--gradient-card); border: 1px solid var(--color-border); border-radius: var(--radius-xl); transition: all var(--transition-base); } .feature-card:hover { border-color: var(--color-border-strong); box-shadow: var(--shadow-card-hover); transform: translateY(-2px); } .feature-icon { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; margin-bottom: var(--space-4); background: var(--color-bg-secondary); border-radius: var(--radius-lg); color: var(--color-primary); } [data-theme="dark"] .feature-icon { background: var(--color-surface-elevated); } .feature-icon svg { width: 24px; height: 24px; } .feature-card h3 { font-size: var(--font-size-lg); margin-bottom: var(--space-2); } .feature-card p { font-size: var(--font-size-sm); } /* Premium Features */ .premium-badge { display: inline-flex; align-items: center; gap: var(--space-1); padding: var(--space-1) var(--space-2); margin-bottom: var(--space-3); font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); color: var(--color-accent-secondary); background: rgba(233, 162, 59, 0.12); border-radius: var(--radius-full); text-transform: uppercase; letter-spacing: 0.5px; } [data-theme="dark"] .premium-badge { background: rgba(255, 181, 77, 0.2); } /* ======================================== Screenshots Section ======================================== */ .screenshots { background: var(--color-bg-secondary); overflow: hidden; } .screenshots-header { text-align: center; max-width: 600px; margin: 0 auto var(--space-12); } .screenshots-gallery { display: flex; gap: var(--space-6); padding: var(--space-4) 0; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .screenshots-gallery::-webkit-scrollbar { display: none; } .screenshot-item { flex: 0 0 auto; scroll-snap-align: center; } .screenshot-item:first-child { margin-left: calc((100vw - var(--max-width-content)) / 2 + var(--space-6)); } .screenshot-item:last-child { margin-right: calc((100vw - var(--max-width-content)) / 2 + var(--space-6)); } @media (max-width: 980px) { .screenshot-item:first-child { margin-left: var(--space-6); } .screenshot-item:last-child { margin-right: var(--space-6); } } .screenshot-frame { width: 260px; height: 520px; background: var(--color-surface); border-radius: var(--radius-2xl); box-shadow: var(--shadow-lg); overflow: hidden; display: flex; align-items: center; justify-content: center; color: var(--color-text-tertiary); font-size: var(--font-size-sm); } /* ======================================== Built for iOS Section ======================================== */ .ios-features { background: var(--color-bg); } .ios-features-header { text-align: center; max-width: 600px; margin: 0 auto var(--space-12); } .ios-features-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-6); } @media (max-width: 968px) { .ios-features-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { .ios-features-grid { grid-template-columns: 1fr; } } .ios-feature { text-align: center; padding: var(--space-6); } .ios-feature-icon { display: flex; align-items: center; justify-content: center; width: 56px; height: 56px; margin: 0 auto var(--space-4); background: var(--color-bg-secondary); border-radius: var(--radius-lg); color: var(--color-primary); } [data-theme="dark"] .ios-feature-icon { background: var(--color-surface); } .ios-feature-icon svg { width: 28px; height: 28px; } .ios-feature h4 { margin-bottom: var(--space-2); } .ios-feature p { font-size: var(--font-size-sm); } /* ======================================== Testimonials Section ======================================== */ .testimonials { background: var(--color-bg-secondary); } .testimonials-header { text-align: center; max-width: 600px; margin: 0 auto var(--space-12); } .testimonials-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-6); } @media (max-width: 968px) { .testimonials-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 640px) { .testimonials-grid { grid-template-columns: 1fr; } } .testimonial-card { padding: var(--space-6); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-xl); } .testimonial-stars { display: flex; gap: var(--space-1); margin-bottom: var(--space-4); color: var(--color-warning); } .testimonial-stars svg { width: 16px; height: 16px; fill: currentColor; } .testimonial-text { font-size: var(--font-size-base); color: var(--color-text); margin-bottom: var(--space-4); line-height: var(--line-height-relaxed); } .testimonial-author { font-size: var(--font-size-sm); color: var(--color-text-tertiary); } /* ======================================== FAQ Section ======================================== */ .faq { background: var(--color-bg); } .faq-header { text-align: center; max-width: 600px; margin: 0 auto var(--space-12); } .faq-list { max-width: 680px; margin: 0 auto; } .faq-item { border-bottom: 1px solid var(--color-border); } .faq-item:first-child { border-top: 1px solid var(--color-border); } .faq-question { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: var(--space-5) 0; font-size: var(--font-size-base); font-weight: var(--font-weight-medium); color: var(--color-text); text-align: left; cursor: pointer; } .faq-question::after { content: '+'; font-size: var(--font-size-xl); font-weight: var(--font-weight-normal); color: var(--color-text-tertiary); transition: transform var(--transition-fast); } .faq-item.open .faq-question::after { content: '-'; } .faq-answer { max-height: 0; overflow: hidden; transition: max-height var(--transition-base); } .faq-item.open .faq-answer { max-height: 500px; } .faq-answer-inner { padding-bottom: var(--space-5); color: var(--color-text-secondary); line-height: var(--line-height-relaxed); } /* ======================================== CTA Section ======================================== */ .cta { background: var(--color-bg-secondary); text-align: center; } .cta-content { max-width: 600px; margin: 0 auto; } .cta h2 { margin-bottom: var(--space-4); } .cta p { margin-bottom: var(--space-8); } .cta-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-4); } /* ======================================== Footer ======================================== */ .footer { background: var(--color-bg); border-top: 1px solid var(--color-border); padding: var(--space-16) 0 var(--space-8); } .footer-grid { display: grid; grid-template-columns: 2fr repeat(3, 1fr); gap: var(--space-12); margin-bottom: var(--space-12); } @media (max-width: 768px) { .footer-grid { grid-template-columns: 1fr 1fr; gap: var(--space-8); } } @media (max-width: 480px) { .footer-grid { grid-template-columns: 1fr; } } .footer-brand { max-width: 280px; } .footer-logo { display: flex; align-items: center; gap: var(--space-3); font-weight: var(--font-weight-semibold); font-size: var(--font-size-lg); color: var(--color-text); margin-bottom: var(--space-4); } .footer-logo svg, .footer-logo img { width: 32px; height: 32px; } .footer-brand p { font-size: var(--font-size-sm); margin-bottom: var(--space-4); } .footer-column h5 { font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.5px; color: var(--color-text-tertiary); margin-bottom: var(--space-4); } .footer-links { display: flex; flex-direction: column; gap: var(--space-3); } .footer-link { font-size: var(--font-size-sm); color: var(--color-text-secondary); } .footer-link:hover { color: var(--color-text); } .footer-bottom { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-4); padding-top: var(--space-8); border-top: 1px solid var(--color-border); } .footer-copyright { font-size: var(--font-size-sm); color: var(--color-text-tertiary); } .footer-legal { display: flex; gap: var(--space-6); } .footer-legal a { font-size: var(--font-size-sm); color: var(--color-text-tertiary); } .footer-legal a:hover { color: var(--color-text-secondary); } /* ======================================== Page Header (for inner pages) ======================================== */ .page-header { padding-top: calc(var(--nav-height) + var(--space-16)); padding-bottom: var(--space-12); background: var(--gradient-hero); text-align: center; } .page-header h1 { margin-bottom: var(--space-4); } .page-header p { font-size: var(--font-size-lg); max-width: 600px; margin: 0 auto; } .page-header-meta { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--space-4); margin-top: var(--space-4); font-size: var(--font-size-sm); color: var(--color-text-tertiary); } /* ======================================== Content Styles (for policy pages) ======================================== */ .content { padding: var(--space-16) 0; } .content-body { max-width: var(--max-width-text); margin: 0 auto; } .content-body h2 { font-size: var(--font-size-2xl); margin-top: var(--space-12); margin-bottom: var(--space-4); } .content-body h2:first-child { margin-top: 0; } .content-body h3 { font-size: var(--font-size-xl); margin-top: var(--space-8); margin-bottom: var(--space-3); } .content-body p { margin-bottom: var(--space-4); } .content-body ul, .content-body ol { margin-bottom: var(--space-4); padding-left: var(--space-6); } .content-body ul { list-style: disc; } .content-body ol { list-style: decimal; } .content-body li { margin-bottom: var(--space-2); color: var(--color-text-secondary); } .content-body a { text-decoration: underline; text-underline-offset: 2px; } .content-body strong { font-weight: var(--font-weight-semibold); color: var(--color-text); } .content-body code { padding: var(--space-1) var(--space-2); font-family: var(--font-mono); font-size: 0.875em; background: var(--color-bg-secondary); border-radius: var(--radius-sm); } /* Summary Box */ .summary-box { padding: var(--space-6); margin-bottom: var(--space-8); background: var(--color-bg-secondary); border-radius: var(--radius-lg); border-left: 4px solid var(--color-primary); } [data-theme="dark"] .summary-box { background: var(--color-surface); } .summary-box h3 { font-size: var(--font-size-lg); margin-top: 0; margin-bottom: var(--space-3); } .summary-box ul { margin-bottom: 0; } .summary-box li { margin-bottom: var(--space-2); } .summary-box li:last-child { margin-bottom: 0; } /* Info Box */ .info-box { padding: var(--space-4); margin: var(--space-6) 0; background: rgba(0, 113, 227, 0.08); border-radius: var(--radius-md); border: 1px solid rgba(0, 113, 227, 0.2); } [data-theme="dark"] .info-box { background: rgba(10, 132, 255, 0.1); border-color: rgba(10, 132, 255, 0.2); } .info-box p { margin-bottom: 0; font-size: var(--font-size-sm); color: var(--color-text); } /* Warning Box */ .warning-box { padding: var(--space-4); margin: var(--space-6) 0; background: rgba(255, 149, 0, 0.08); border-radius: var(--radius-md); border: 1px solid rgba(255, 149, 0, 0.2); } .warning-box p { margin-bottom: 0; font-size: var(--font-size-sm); color: var(--color-text); } /* Steps List */ .steps-list { counter-reset: step; list-style: none; padding-left: 0; } .steps-list li { position: relative; padding-left: var(--space-10); margin-bottom: var(--space-4); } .steps-list li::before { counter-increment: step; content: counter(step); position: absolute; left: 0; top: 0; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); color: var(--color-primary); background: rgba(0, 113, 227, 0.1); border-radius: var(--radius-full); } [data-theme="dark"] .steps-list li::before { background: rgba(10, 132, 255, 0.15); } /* ======================================== Cards Grid (for support, press kit) ======================================== */ .cards-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-6); } @media (max-width: 640px) { .cards-grid { grid-template-columns: 1fr; } } .card { padding: var(--space-6); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-xl); transition: all var(--transition-base); } .card:hover { border-color: var(--color-border-strong); box-shadow: var(--shadow-card); } .card-icon { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; margin-bottom: var(--space-4); background: var(--color-bg-secondary); border-radius: var(--radius-lg); color: var(--color-primary); } [data-theme="dark"] .card-icon { background: var(--color-surface-elevated); } .card-icon svg { width: 24px; height: 24px; } .card h3 { font-size: var(--font-size-lg); margin-bottom: var(--space-2); } .card p { font-size: var(--font-size-sm); margin-bottom: var(--space-4); } .card .btn { margin-top: auto; } /* ======================================== Status Page ======================================== */ .status-indicator { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-4) var(--space-6); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); margin-bottom: var(--space-8); } .status-dot { width: 12px; height: 12px; border-radius: var(--radius-full); background: var(--color-accent); animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .status-dot.warning { background: var(--color-warning); } .status-dot.error { background: var(--color-error); } .status-text { font-weight: var(--font-weight-medium); } .status-list { margin-bottom: var(--space-8); } .status-item { display: flex; align-items: center; justify-content: space-between; padding: var(--space-4) 0; border-bottom: 1px solid var(--color-border); } .status-item:first-child { border-top: 1px solid var(--color-border); } .status-item-name { font-weight: var(--font-weight-medium); } .status-item-status { display: flex; align-items: center; gap: var(--space-2); font-size: var(--font-size-sm); color: var(--color-accent); } .status-item-status.warning { color: var(--color-warning); } .status-item-status.error { color: var(--color-error); } /* ======================================== Changelog ======================================== */ .changelog-list { max-width: var(--max-width-text); margin: 0 auto; } .changelog-entry { padding: var(--space-8) 0; border-bottom: 1px solid var(--color-border); } .changelog-entry:first-child { padding-top: 0; } .changelog-header { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); margin-bottom: var(--space-4); } .changelog-version { font-size: var(--font-size-xl); font-weight: var(--font-weight-semibold); } .changelog-date { font-size: var(--font-size-sm); color: var(--color-text-tertiary); } .changelog-tag { padding: var(--space-1) var(--space-2); font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.5px; border-radius: var(--radius-sm); } .changelog-tag.new { background: rgba(52, 199, 89, 0.1); color: var(--color-accent); } .changelog-tag.improved { background: rgba(0, 113, 227, 0.1); color: var(--color-primary); } .changelog-tag.fixed { background: rgba(255, 149, 0, 0.1); color: var(--color-warning); } .changelog-body ul { list-style: disc; padding-left: var(--space-6); } .changelog-body li { margin-bottom: var(--space-2); color: var(--color-text-secondary); } /* ======================================== Press Kit ======================================== */ .brand-colors { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--space-4); margin-top: var(--space-6); } .color-swatch { aspect-ratio: 1; border-radius: var(--radius-lg); display: flex; flex-direction: column; align-items: center; justify-content: flex-end; padding: var(--space-3); font-size: var(--font-size-xs); font-family: var(--font-mono); color: white; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); } .icon-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); gap: var(--space-4); margin-top: var(--space-6); } .icon-item { display: flex; flex-direction: column; align-items: center; gap: var(--space-2); padding: var(--space-4); background: var(--color-bg-secondary); border-radius: var(--radius-lg); } .icon-item img, .icon-item svg { width: 64px; height: 64px; border-radius: var(--radius-md); } .icon-item span { font-size: var(--font-size-xs); color: var(--color-text-tertiary); } /* ======================================== Cookie Notice ======================================== */ .cookie-notice { position: fixed; bottom: var(--space-4); left: var(--space-4); right: var(--space-4); max-width: 480px; padding: var(--space-4); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); z-index: var(--z-toast); } .cookie-notice-content p { margin-bottom: var(--space-3); font-size: var(--font-size-sm); } .cookie-notice-actions { display: flex; gap: var(--space-2); } /* ======================================== Utilities ======================================== */ .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .skip-link { position: absolute; top: -40px; left: 0; padding: var(--space-2) var(--space-4); background: var(--color-primary); color: white; z-index: 9999; transition: top var(--transition-fast); } .skip-link:focus { top: 0; } /* Print styles */ @media print { .nav, .footer, .cookie-notice, .theme-toggle { display: none; } body { background: white; color: black; } .page-header { padding-top: var(--space-8); } }