// Mobile Shopping App Styles // Clean, simple design without glassmorphism :root { --primary-color: #007AFF; --secondary-color: #5856D6; --success-color: #34C759; --danger-color: #FF3B30; --warning-color: #FF9500; --background-color: #f8f9fa; --surface-color: #ffffff; --border-color: #e1e5e9; --text-primary: #1d1d1f; --text-secondary: #6e6e73; --text-muted: #8e8e93; --shadow-light: 0 2px 8px rgba(0, 0, 0, 0.1); --shadow-medium: 0 4px 16px rgba(0, 0, 0, 0.15); --border-radius: 12px; --border-radius-small: 8px; --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 16px; --spacing-lg: 24px; --spacing-xl: 32px; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; background-color: var(--background-color); color: var(--text-primary); line-height: 1.5; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .app { min-height: 100vh; display: flex; flex-direction: column; max-width: 100vw; overflow-x: hidden; } // Header .header { background: var(--surface-color); border-bottom: 1px solid var(--border-color); padding: var(--spacing-sm) var(--spacing-md); position: sticky; top: 0; z-index: 100; box-shadow: var(--shadow-light); .header-content { display: flex; align-items: center; justify-content: space-between; max-width: 600px; margin: 0 auto; h1 { font-size: 1.5rem; font-weight: 600; color: var(--text-primary); display: flex; align-items: center; gap: var(--spacing-sm); svg { color: var(--primary-color); font-size: 1.25rem; } } .header-actions { display: flex; align-items: center; gap: var(--spacing-sm); } } } // Main Content .main { flex: 1; padding: var(--spacing-md); max-width: 600px; margin: 0 auto; width: 100%; padding-bottom: 100px; // Space for FAB } // Error Message .error-message { background: var(--danger-color); color: white; padding: var(--spacing-md); border-radius: var(--border-radius-small); margin-bottom: var(--spacing-md); display: flex; align-items: center; justify-content: space-between; font-weight: 500; button { background: none; border: none; color: white; font-size: 1.25rem; cursor: pointer; padding: 0; width: 24px; height: 24px; border-radius: 50%; display: flex; align-items: center; justify-content: center; &:hover { background: rgba(255, 255, 255, 0.1); } } } // Loading State .loading { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 60vh; color: var(--text-secondary); .loading-icon { font-size: 3rem; color: var(--primary-color); margin-bottom: var(--spacing-md); animation: pulse 2s infinite; } p { font-size: 1.1rem; font-weight: 500; } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } // Shopping Content .shopping-content { display: flex; flex-direction: column; gap: var(--spacing-xl); } .shopping-section { h2 { font-size: 1.25rem; font-weight: 600; color: var(--text-primary); margin-bottom: var(--spacing-md); padding: 0 var(--spacing-xs); } } .items-list { display: flex; flex-direction: column; gap: var(--spacing-sm); } // Empty State .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--spacing-xl); color: var(--text-muted); text-align: center; svg { font-size: 3rem; margin-bottom: var(--spacing-md); opacity: 0.5; } p { font-size: 1.1rem; font-weight: 500; } } // Shopping Item .shopping-item { background: var(--surface-color); border: 1px solid var(--border-color); border-radius: var(--border-radius); padding: var(--spacing-md); display: flex; align-items: flex-start; gap: var(--spacing-md); transition: all 0.2s ease; box-shadow: var(--shadow-light); &:hover { box-shadow: var(--shadow-medium); transform: translateY(-1px); } &.checked { opacity: 0.7; background: #f8f9fa; .item-name { text-decoration: line-through; color: var(--text-muted); } .check-btn { background: var(--success-color); color: white; &:hover { background: #28a745; } } } .check-btn { width: 32px; height: 32px; border-radius: 50%; border: 2px solid var(--border-color); background: var(--surface-color); color: transparent; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.2s ease; flex-shrink: 0; margin-top: 2px; &:hover { border-color: var(--success-color); background: rgba(52, 199, 89, 0.1); } svg { font-size: 0.875rem; } } .item-content { flex: 1; min-width: 0; .item-main { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--spacing-xs); .item-name { font-weight: 500; color: var(--text-primary); font-size: 1rem; flex: 1; word-break: break-word; } .item-amount { background: var(--primary-color); color: white; padding: 2px 8px; border-radius: 12px; font-size: 0.75rem; font-weight: 600; margin-left: var(--spacing-sm); flex-shrink: 0; } } .item-meta { display: flex; align-items: center; gap: var(--spacing-md); font-size: 0.875rem; color: var(--text-secondary); .deletion-timer { display: flex; align-items: center; gap: var(--spacing-xs); color: var(--warning-color); font-weight: 500; svg { font-size: 0.75rem; } } } .edit-form { display: flex; flex-direction: column; gap: var(--spacing-sm); input { width: 100%; padding: var(--spacing-sm); border: 1px solid var(--border-color); border-radius: var(--border-radius-small); font-size: 1rem; background: var(--surface-color); &:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.1); } } .edit-actions { display: flex; gap: var(--spacing-sm); margin-top: var(--spacing-xs); } } } .item-actions { display: flex; gap: var(--spacing-xs); flex-shrink: 0; } } // Buttons .btn { border: none; border-radius: var(--border-radius-small); padding: var(--spacing-sm) var(--spacing-md); font-size: 0.875rem; font-weight: 500; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: var(--spacing-xs); transition: all 0.2s ease; text-decoration: none; &:disabled { opacity: 0.5; cursor: not-allowed; } &.btn-primary { background: var(--primary-color); color: white; &:hover:not(:disabled) { background: #0056b3; transform: translateY(-1px); } } &.btn-secondary { background: var(--border-color); color: var(--text-primary); &:hover:not(:disabled) { background: #d1d5db; } } &.btn-danger { background: var(--danger-color); color: white; &:hover:not(:disabled) { background: #dc3545; } } &.btn-small { padding: var(--spacing-xs); font-size: 0.75rem; width: 32px; height: 32px; svg { font-size: 0.875rem; } } svg { font-size: 1rem; } } // Add Form Overlay .add-form-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: var(--spacing-md); .add-form { background: var(--surface-color); border-radius: var(--border-radius); padding: var(--spacing-lg); width: 100%; max-width: 400px; box-shadow: var(--shadow-medium); h3 { font-size: 1.25rem; font-weight: 600; margin-bottom: var(--spacing-md); color: var(--text-primary); } .form-group { display: flex; flex-direction: column; gap: var(--spacing-sm); margin-bottom: var(--spacing-lg); input { width: 100%; padding: var(--spacing-md); border: 1px solid var(--border-color); border-radius: var(--border-radius-small); font-size: 1rem; background: var(--surface-color); &:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.1); } } } .form-actions { display: flex; gap: var(--spacing-sm); justify-content: flex-end; } } } // Floating Action Button .fab-container { position: fixed; bottom: var(--spacing-lg); right: var(--spacing-lg); z-index: 100; .fab { width: 56px; height: 56px; border-radius: 50%; background: var(--primary-color); color: white; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 1.25rem; box-shadow: var(--shadow-medium); transition: all 0.2s ease; &:hover { background: #0056b3; transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2); } &:active { transform: translateY(0); } } } // Responsive Design @media (max-width: 480px) { .main { padding: var(--spacing-sm); } .header { padding: var(--spacing-xs) var(--spacing-sm); .header-content h1 { font-size: 1.25rem; } } .shopping-item { padding: var(--spacing-sm); .item-content .item-main { flex-direction: column; align-items: flex-start; gap: var(--spacing-xs); .item-amount { margin-left: 0; } } .item-actions { flex-direction: column; } } .add-form-overlay { padding: var(--spacing-sm); .add-form { padding: var(--spacing-md); } } .fab-container { bottom: var(--spacing-md); right: var(--spacing-md); .fab { width: 48px; height: 48px; font-size: 1.125rem; } } }