UNPKG

create-fluxstack

Version:

⚡ Revolutionary full-stack TypeScript framework with Declarative Config System, Elysia + React + Bun

883 lines (748 loc) 14.6 kB
/* Clean Modern App Styles */ * { box-sizing: border-box; } #root { max-width: none; margin: 0; padding: 0; } body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; background: #f8fafc; color: #1e293b; line-height: 1.6; } .app { min-height: 100vh; background: #f8fafc; } /* Header */ .header { background: white; border-bottom: 1px solid #e2e8f0; padding: 1rem 0; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .header-content { max-width: 1200px; margin: 0 auto; padding: 0 1rem; display: flex; justify-content: space-between; align-items: center; } .header-left { display: flex; align-items: center; gap: 2rem; } .logo { font-size: 1.5rem; font-weight: 700; color: #2563eb; display: flex; align-items: center; gap: 0.5rem; } .header-tabs { display: flex; gap: 0; align-items: center; } .status-badge { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1rem; border-radius: 6px; font-size: 0.875rem; font-weight: 500; } .status-badge.online { background: #dcfce7; color: #166534; } .status-badge.offline { background: #fee2e2; color: #991b1b; } .status-dot { width: 8px; height: 8px; border-radius: 50%; } .status-badge.online .status-dot { background: #22c55e; } .status-badge.offline .status-dot { background: #ef4444; } /* Main Content */ .main { max-width: 1200px; margin: 0 auto; padding: 2rem 1rem; } .page-title { font-size: 2rem; font-weight: 700; color: #1a202c; margin-bottom: 0.5rem; } .page-subtitle { color: #64748b; font-size: 1.125rem; margin-bottom: 2rem; } /* Stats Grid */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 2rem; } .stat-card { background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 1.5rem; text-align: center; transition: all 0.2s ease; } .stat-card:hover { border-color: #2563eb; box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1); } .stat-number { font-size: 2.5rem; font-weight: 700; color: #2563eb; margin-bottom: 0.5rem; line-height: 1; } .stat-label { color: #64748b; font-size: 0.875rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; } /* Form Section */ .form-section { background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 1.5rem; margin-bottom: 2rem; } .section-title { font-size: 1.25rem; font-weight: 600; color: #1a202c; margin-bottom: 1rem; } .form-grid { display: grid; grid-template-columns: 1fr 1fr auto; gap: 1rem; align-items: end; } .form-group { display: flex; flex-direction: column; } .form-label { font-size: 0.875rem; font-weight: 500; color: #374151; margin-bottom: 0.5rem; } .form-input { padding: 0.75rem; border: 1px solid #d1d5db; border-radius: 6px; font-size: 1rem; transition: all 0.2s ease; background: white; } .form-input:focus { outline: none; border-color: #2563eb; box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); } .btn { padding: 0.75rem 1.5rem; border: none; border-radius: 6px; font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.2s ease; display: inline-flex; align-items: center; gap: 0.5rem; } .btn-primary { background: #2563eb; color: white; } .btn-primary:hover:not(:disabled) { background: #1d4ed8; } .btn-secondary { background: #f1f5f9; color: #475569; border: 1px solid #e2e8f0; } .btn-secondary:hover:not(:disabled) { background: #e2e8f0; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } /* Users Section */ .users-section { background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 1.5rem; } .section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; } .users-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; } .user-card { border: 1px solid #e2e8f0; border-radius: 6px; padding: 1rem; transition: all 0.2s ease; } .user-card:hover { border-color: #2563eb; box-shadow: 0 2px 8px rgba(37, 99, 235, 0.1); } .user-avatar { width: 40px; height: 40px; border-radius: 50%; background: linear-gradient(135deg, #2563eb, #1d4ed8); display: flex; align-items: center; justify-content: center; color: white; font-weight: 600; margin-bottom: 0.75rem; } .user-name { font-weight: 600; color: #1a202c; margin-bottom: 0.25rem; } .user-email { color: #64748b; font-size: 0.875rem; margin-bottom: 0.75rem; } .user-actions { display: flex; gap: 0.5rem; } .btn-sm { padding: 0.5rem 0.75rem; font-size: 0.75rem; } .btn-danger { background: #ef4444; color: white; } .btn-danger:hover:not(:disabled) { background: #dc2626; } /* Empty State */ .empty-state { text-align: center; padding: 3rem 1rem; color: #64748b; } .empty-icon { font-size: 3rem; margin-bottom: 1rem; opacity: 0.5; } /* Loading */ .loading { text-align: center; padding: 2rem; color: #64748b; } .spinner { width: 20px; height: 20px; border: 2px solid #e2e8f0; border-top-color: #2563eb; border-radius: 50%; animation: spin 1s linear infinite; display: inline-block; margin-right: 0.5rem; } @keyframes spin { to { transform: rotate(360deg); } } /* Toast Notifications */ .toast { position: fixed; top: 1rem; right: 1rem; z-index: 1000; padding: 1rem 1.5rem; border-radius: 6px; color: white; font-weight: 500; cursor: pointer; transition: all 0.3s ease; transform: translateY(-100px); opacity: 0; max-width: 400px; } .toast.show { transform: translateY(0); opacity: 1; } .toast.success { background: #22c55e; } .toast.error { background: #ef4444; } /* Responsive */ @media (max-width: 768px) { .header-content { flex-direction: column; gap: 1rem; } .header-left { flex-direction: column; gap: 1rem; align-items: center; } .header-tabs { gap: 0.5rem; } .tab { padding: 0.5rem 1rem; font-size: 0.8rem; } .form-grid { grid-template-columns: 1fr; } .stats-grid { grid-template-columns: repeat(2, 1fr); } .users-grid { grid-template-columns: 1fr; } .section-header { flex-direction: column; gap: 1rem; align-items: stretch; } } @media (max-width: 480px) { .stats-grid { grid-template-columns: 1fr; } } .tab { background: none; border: none; padding: 0.75rem 1.5rem; cursor: pointer; font-size: 0.875rem; font-weight: 500; color: #64748b; border-radius: 6px; transition: all 0.2s ease; position: relative; } .tab:hover { color: #2563eb; background: rgba(37, 99, 235, 0.05); } .tab.active { color: #2563eb; background: rgba(37, 99, 235, 0.1); } /* Overview Content */ .overview-content { padding: 2rem 0; } .hero-section { text-align: center; margin-bottom: 4rem; } .hero-text h1 { font-size: 4rem; font-weight: 700; margin-bottom: 1rem; background: linear-gradient(135deg, #2563eb, #1d4ed8); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .hero-subtitle { font-size: 1.5rem; color: #64748b; margin-bottom: 3rem; max-width: 600px; margin-left: auto; margin-right: auto; } .features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; margin-top: 3rem; } .feature-item { background: white; border: 1px solid #e2e8f0; border-radius: 12px; padding: 2rem; text-align: center; transition: all 0.2s ease; } .feature-item:hover { border-color: #2563eb; box-shadow: 0 8px 25px rgba(37, 99, 235, 0.15); transform: translateY(-2px); } .feature-icon { font-size: 3rem; margin-bottom: 1rem; display: block; } .feature-item h3 { font-size: 1.25rem; font-weight: 600; color: #1a202c; margin-bottom: 0.5rem; } .feature-item p { color: #64748b; margin: 0; } .tech-stack { background: white; border: 1px solid #e2e8f0; border-radius: 12px; padding: 3rem; margin-top: 3rem; } .tech-stack h2 { text-align: center; font-size: 2rem; font-weight: 600; color: #1a202c; margin-bottom: 2rem; } .stack-items { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 2rem; } .stack-category h3 { color: #2563eb; font-size: 1.25rem; font-weight: 600; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid #e2e8f0; } .stack-category ul { list-style: none; padding: 0; margin: 0; } .stack-category li { padding: 0.5rem 0; color: #4b5563; border-bottom: 1px solid #f1f5f9; } .stack-category li:last-child { border-bottom: none; } /* Demo Content */ .demo-content { padding: 2rem 0; } .demo-content h2 { font-size: 2rem; font-weight: 600; color: #1a202c; margin-bottom: 0.5rem; } .demo-subtitle { color: #64748b; font-size: 1.125rem; margin-bottom: 2rem; } /* API Docs */ .api-docs { padding: 2rem 0; } .api-docs h2 { font-size: 2rem; font-weight: 600; color: #1a202c; margin-bottom: 0.5rem; } .api-subtitle { color: #64748b; font-size: 1.125rem; margin-bottom: 2rem; } .swagger-links { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } .swagger-iframe-container { margin: 2rem 0; background: white; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .swagger-iframe-container h3 { margin: 0; padding: 1rem 1.5rem; background: #f8fafc; border-bottom: 1px solid #e2e8f0; font-size: 1.1rem; color: #475569; } .swagger-iframe { width: 100%; height: 800px; border: none; display: block; } .swagger-card { background: white; border: 1px solid #e2e8f0; border-radius: 12px; padding: 2rem; text-align: center; transition: all 0.2s ease; } .swagger-card:hover { border-color: #2563eb; box-shadow: 0 8px 25px rgba(37, 99, 235, 0.15); transform: translateY(-2px); } .swagger-card h3 { font-size: 1.25rem; font-weight: 600; color: #1a202c; margin-bottom: 0.5rem; } .swagger-card p { color: #64748b; margin-bottom: 1.5rem; } .swagger-card .btn { text-decoration: none; display: inline-flex; align-items: center; gap: 0.5rem; } .swagger-preview { background: white; border: 1px solid #e2e8f0; border-radius: 12px; padding: 2rem; margin-bottom: 2rem; } .swagger-preview h3 { font-size: 1.5rem; font-weight: 600; color: #1a202c; margin-bottom: 1.5rem; } .code-examples { display: flex; flex-direction: column; gap: 2rem; } .example-section h4 { font-size: 1rem; font-weight: 600; color: #374151; margin-bottom: 0.5rem; } .api-features { background: white; border: 1px solid #e2e8f0; border-radius: 12px; padding: 2rem; } .api-features h3 { font-size: 1.5rem; font-weight: 600; color: #1a202c; margin-bottom: 1.5rem; text-align: center; } .features-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; } .feature { display: flex; align-items: flex-start; gap: 1rem; padding: 1rem; border-radius: 8px; transition: all 0.2s ease; } .feature:hover { background: #f8fafc; } .feature-icon { font-size: 2rem; line-height: 1; } .feature h4 { font-size: 1rem; font-weight: 600; color: #1a202c; margin-bottom: 0.25rem; } .feature p { color: #64748b; font-size: 0.875rem; margin: 0; } .endpoint-section { margin-bottom: 3rem; } .endpoint-section h3 { font-size: 1.5rem; font-weight: 600; color: #1a202c; margin-bottom: 1rem; } .endpoint-card { background: white; border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; } .endpoint-header { background: #f8fafc; padding: 1rem 1.5rem; border-bottom: 1px solid #e2e8f0; display: flex; align-items: center; gap: 1rem; } .method { padding: 0.25rem 0.75rem; border-radius: 4px; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; } .method.get { background: #dcfce7; color: #166534; } .method.post { background: #dbeafe; color: #1e40af; } .method.delete { background: #fee2e2; color: #991b1b; } .endpoint-header code { background: #f1f5f9; padding: 0.25rem 0.5rem; border-radius: 4px; font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace; font-size: 0.875rem; } .endpoint-body { padding: 1.5rem; } .endpoint-body h4 { font-size: 1rem; font-weight: 600; color: #374151; margin: 1.5rem 0 0.5rem 0; } .endpoint-body h4:first-child { margin-top: 0; } .code-block { background: #1e293b; color: #e2e8f0; padding: 1rem; border-radius: 6px; font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace; font-size: 0.875rem; line-height: 1.6; overflow-x: auto; margin: 0.5rem 0 1rem 0; border: 1px solid #334155; } /* Responsive Enhancements */ @media (max-width: 768px) { .hero-text h1 { font-size: 3rem; } .hero-subtitle { font-size: 1.25rem; } .features-grid { grid-template-columns: 1fr; } .stack-items { grid-template-columns: 1fr; } .tech-stack { padding: 2rem 1.5rem; } .endpoint-header { flex-direction: column; align-items: flex-start; gap: 0.5rem; } } @media (max-width: 480px) { .hero-text h1 { font-size: 2.5rem; } .header-left { gap: 0.5rem; } .tab { padding: 0.5rem 0.75rem; font-size: 0.75rem; } }