/* styles.css – Premium UI design (glassmorphism, dark mode) */ :root { --font-primary: 'Inter', sans-serif; --color-bg-dark: #0a0a0a; --color-card-bg: rgba(26, 26, 26, 0.8); --color-accent-gradient: linear-gradient(135deg, #ff7e5f, #feb47b); --color-accent: #4a90e2; --color-text-light: #f0f0f0; --color-text-muted: #bbbbbb; } body { margin: 0; font-family: var(--font-primary); background: var(--color-bg-dark); color: var(--color-text-light); transition: background 0.3s ease; } .dark { background: var(--color-bg-dark); } .light { background: #f5f5f5; color: #222; } .header { padding: 1rem 2rem; display: flex; justify-content: space-between; align-items: center; backdrop-filter: blur(12px); background: rgba(10,10,10,0.5); } h1 { margin: 0; font-size: 2rem; font-weight: 600; } .btn { padding: 0.6rem 1.2rem; border: none; border-radius: 0.5rem; cursor: pointer; font-weight: 500; transition: transform 0.2s, box-shadow 0.2s; } .btn--primary { background: var(--color-accent-gradient); color: #fff; } .btn--secondary { background: var(--color-card-bg); color: var(--color-text-light); border: 1px solid var(--color-accent); } .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.3); } .container { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; padding: 2rem; } .card { background: var(--color-card-bg); border-radius: 1rem; padding: 1.5rem; backdrop-filter: blur(12px); box-shadow: 0 4px 12px rgba(0,0,0,0.2); transition: transform 0.2s; } .card:hover { transform: translateY(-4px); } .stats { display: flex; gap: 1rem; } .stat { flex: 1; text-align: center; } .stat__value { display: block; font-size: 1.8rem; font-weight: 600; color: var(--color-accent); } .stat__label { font-size: 0.9rem; color: var(--color-text-muted); } .builder__canvas { min-height: 200px; border: 2px dashed var(--color-accent); border-radius: 0.5rem; padding: 1rem; margin-bottom: 1rem; } .builder__palette { display: flex; gap: 0.5rem; } .palette-item { flex: 1; padding: 0.5rem; background: var(--color-accent-gradient); color: #fff; border: none; border-radius: 0.4rem; cursor: grab; } .palette-item:active { cursor: grabbing; } /* Accessibility focus */ button:focus-visible, .palette-item:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; } /* Skeleton Loaders */ .skeleton { background: linear-gradient(90deg, rgba(255, 255, 255, 0.05) 25%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.05) 75%); background-size: 200% 100%; animation: loading 1.5s infinite ease-in-out; border-radius: 4px; } @keyframes loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .skeleton-text { height: 1rem; margin-bottom: 0.5rem; width: 100%; } .skeleton-value { height: 1.8rem; width: 60%; margin: 0 auto 0.5rem auto; } .skeleton-label { height: 0.9rem; width: 80%; margin: 0 auto; } /* Builder Drag & Drop States */ .builder__canvas { display: flex; flex-direction: column; gap: 0.5rem; transition: background 0.2s; } .builder__canvas.drag-over { background: rgba(74, 144, 226, 0.1); border-color: #ff7e5f; } .canvas-block { background: rgba(255, 255, 255, 0.1); border: 1px solid var(--color-accent); padding: 0.8rem; border-radius: 0.4rem; color: var(--color-text-light); cursor: pointer; animation: fadeIn 0.3s ease-out; } .canvas-block:hover { background: rgba(255, 255, 255, 0.2); } .dragging { opacity: 0.5; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } }