49. ArrayLists

Notes:

  • The Java Collections framework defines a group of classes that each have some sort of architecture used for grouping collections of individual objects. A framework is basically a platform of pre-written code (typically includes multitudes of classes and interfaces) used to assist programmers with creating applications, usually in the form of providing useful attributes and methods to help keep programmers' code concise.
  • The ArrayList class, which a part of the Java Collections framework, is essentially utilized to define a special type of array that is resizable and mutable. Basically, an ArrayList can change itself (size and content) dynamically. ArrayList is a Generic class, meaning it takes a parameterized type that specifies the data type it will work with (similar to defining the data type stored by an array).
  • An ArrayList basically stores an internal array within itself, and whenever the internal array is updated whenever the ArrayList has to account for added or removed elements. When the size of the ArrayList exceeds its capacity, the ArrayList copies all of the elements to a new internal array with the new changes implemented.
  • Whenever you remove an element from an ArrayList, the indices all of the elements after that element change (decrement by 1), as the ArrayList has to fill up the hole left by the removed element.
  • The capacity of an ArrayList is different from its size in that the capacity defines the number of elements the ArrayList can store without changing the size of its internal array, while the size is the number of actual data/elements saved within the ArrayList. The capacity of an ArrayList can be manually specified, but is by default 10 elements, and will dynamically grow with the elements appended to the ArrayList (after capacity has been exceeded), but will remain constant when elements are removed from the ArrayList (unless trimToSize() method is used). The size of an ArrayList starts off at 0 if the ArrayList is initialized as empty, and will change in correspondence to elements being added to or removed from the ArrayList.
  • The classes in the Collections framework are grouped by different interfaces (e.g. The list classes such as ArrayList and LinkedList implement the List interface). It is important to note that Lists are ordered data structures, meaning each of their elements are designated a specific consecutive position/index within the List.

Examples:

// Import the ArrayList class, a part of the Collections framework, from the java.util package
import java.util.ArrayList;
// Import List interface
import java.util.List;

public class Application {
    public static void main(String[] args) {
        // Initialize ArrayList (variable type ArrayList and object type ArrayList) of parameterized type Integer, and defines its capacity as 3
        // Cannot define parameterized type with primitive type directly; have to define with wrapper class counterpart, since Generics store objects
        // After defining wrapper class of int (Integer), we can store and access primitive integer data to and from the ArrayList
        ArrayList<Integer> numbers = new ArrayList<Integer>(3);

        // Append elements to ArrayList (can append values directly or values of variables) will dynamically change its size
        numbers.add(10);
        numbers.add(100);
        numbers.add(40);

        // Get size of ArrayList
        System.out.println(numbers.size());

        // Retrieving elements of ArrayList via their index, since ArrayLists are ordered, as well as zero-indexed, just like arrays
        System.out.println(numbers.get(0));

        System.out.println("\nFirst iteration:");
        // Iterate through elements of ArrayList using normal for loop
        // Define for loop capacity with size of ArrayList. size() method to get number of elements in ArrayList
        for (int i = 0; i < numbers.size(); i++) {
            System.out.println(numbers.get(i));
        }

        System.out.println("\nRemoving Elements:");
        // Removing elements from ArrayList via their index will also dynamically change its size
        // Print the element that was removed from ArrayList
        System.out.println(numbers.remove(numbers.size() - 1));
        // Removing the first element may cause the program to take more time than removing the last element, since removing the first element will cause the indices of all subsequent elements to change
        numbers.remove(0);

        System.out.println("\nSecond Iteration:");
        // Enhanced for loop to iterate through ArrayList
        // Can use type Integer instead of int, since both data types equate to each other in terms of what the data they can store (int is primitive counterpart while Integer is object counterpart)
        // Just a reminder that Integer and int can be converted to each other without manual type casting. Just assigning the value will be automatically converted, since their is no conversion risks (e.g. there is low risk of lossy conversion)
        for (int value : numbers) {
            System.out.println(value);
        }

        // The values object variable is of object type ArrayList but of interface variable type List. Notice how List also takes parameterized types
        // This means that values can only implement the attributes and methods defined in List, but not those exclusive to ArrayList (if there are any)
        // Nonetheless, values can still be considered an ArrayList, and can call the properties of ArrayList that are defined in List
        List<String> values = new ArrayList<String>();
        values.add("hi");
        System.out.println("\nUpdating Elements:");
        System.out.println(values.get(0));
        // Update the element at the 0th index to a value of "hey"
        values.set(0, "hey");
        System.out.println(values.get(0));
    }
}

Application.main(null);
3
10

First iteration:
10
100
40

Removing Elements:
40

Second Iteration:
100

Updating Elements:
hi
hey

50. LinkedLists

Notes:

  • Like an ArrayList, a LinkedList is a linear dynamic data structure used for saving a collection of elements. However, a LinkedList stores each element as a node, as opposed to an ArrayList which stores elements in consecutive memory blocks. Each node composes of a value and two pointers (pointers require memory) to the previous and next nodes in the LinkedList. By default, LinkedLists implement a Doubly-LinkedList structure, where each node has both a previous and next pointer. But, LinkedLists can be modified to implement a Singly-LinkedList structure, where each node only has a next pointer.
  • A general rule of thumb is that when you want to add or remove elements toward the end of a List, you should use an ArrayList, but if you want to add or remove elements just about anywhere else in the List, you should use a LinkedList. This is due to the fact that adding new elements anywhere but the end of the List will cause an ArrayList to shift the positions of all the elements after the index at which the new element is added, while a LinkedList does not.
  • An ArrayList essentially organizes and manages an internal array, in which is creates a continuous memory location chain (requiring an internal array as its container) for all of its elements. Because of this, it is easy for an ArrayList to access and traverse through elements by index (can access any element in ArrayList by index in constant time because program can calculate location with index and consecutive memory locations within internal array, but for LinkedList, accessing an element by index causes the LinkedList to start at the head node, then use the next pointers of the subsequent nodes to reach the desired index), as well as add items toward the end of the List, since doing so does not really affect the indices of the other elements in the List. To add on, whenever the size of an ArrayList exceeds the capacity, the current capacity of the ArrayList will double, and the ArrayList will create a new copy of the internal array with the new element changes implemented.
  • Since a LinkedList does not store elements in consecutive memory blocks (each node could be anywhere in memory, but each node's pointers refer to the memory locations), its dynamic memory allocation helps be more efficient in cases such as adding or removing elements within the beginning and middle of the List. A standard LinkedList starts off at the head/first node, and each node within it points to the previous element and next element in the List (basically the pointers of a node refer to the memory locations of the previous and next nodes), where the head node's previous pointer refers to a null value and the last node's next pointer also refers to a null value.
  • Since a node in a LinkedList can be placed anywhere in memory, resizing operations are efficient; adding or removing an element to or from a LinkedList does not shift the positions (memory locations) of the elements around it. Adding an element to a LinkedList causes it to create a new node and insert it to the desired position in the List, then adjust the pointers of the nodes around it, and cause the new node to point to the nodes before and after it. Removing an element from a LinkedList causes it to remove the node at the desired position, then adjusting the pointers of the nodes around with the absence of teh removed element. Note that it will take some time for the LinkedList to traverse to the the desired index, but it is still efficient in that it does not need to change the positions of the other elements to accommodate for the changes.

Examples:

import java.util.ArrayList;
// Import LinkedList class from java.util package
import java.util.LinkedList;
// Import List interface from java.util package
import java.util.List;

public class Application {
    public static void main(String[] args) {
        // Since most of the attributes and methods of the classes that implement the List interface appear in the List interface itself, making the variable type List does not really affect anything
        // Here, it is practical to make the arrayList variable of variable type List, because we are planning to pass it a method that takes parameters of variable type List (although you could still pass it with a variable type class that implements the List interface)
        List<Integer> arrayList = new ArrayList<Integer>();
        // Instantiate LinkedList that contains parameterized type integer
        LinkedList<Integer> linkedList = new LinkedList<Integer>();

        System.out.println("Comparing times between ArrayList and LinkedList:");
        doTimings("ArrayList", arrayList);
        doTimings("LinkedList", linkedList);

        // ArrayList and LinkedList have a lot of common methods, but LinkedList does not have the set() and trimToSize() methods
        // To update values in a LinkedList, you need to create a custom class whose objects represent each node in a LinkedList, and make that class have attributes such as its actual data, previous pointer, and next pointer
        // You can manually implement a set() method for a LinkedList by updating the data attribute of the targeted node
        LinkedList<Integer> numbers = new LinkedList<Integer>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("LinkedList before changes:");
        // Use toString() method to print LinkedList in presentable way
        System.out.println(numbers.toString());
        // LinkedList specific methods
        // Method names are self-explanatory
        numbers.addFirst(0);
        numbers.addLast(7);
        System.out.println(numbers.removeFirst());
        System.out.println(numbers.removeLast());
        System.out.println(numbers.getFirst());
        System.out.println(numbers.getLast());
        System.out.println(numbers.indexOf(2));
        System.out.println("LinkedList after changes:");
        System.out.println(numbers.toString());
    }

    // Make one of the method's parameters of variable type List, which accounts for both ArrayLists and LinkedLists, since List is the parent interface for both of these classes
    private static void doTimings(String type, List<Integer> list) {
        // Populate List with 100,000 items
        for (int i = 0; i < 1E5; i++) {
            list.add(i);
        }
        // The currentTimeMillis() method returns the current time in milliseconds from the universal UNIX reference point (start of 1970)
        long start = System.currentTimeMillis();
        /*
        // Adding items to end of list
        // It should take the ArrayList less time to add elements to the end of the List than the LinkedList
        for (int i = 0; i < 1E5; i++) {
            list.add(i);
        }
        */

        // Adding items to the beginning of the List
        // It should take the ArrayList more time to add elements to the beginning of the List than the LinkedList, because doing so causes the ArrayList to shift the positions of all the other elements in the List (increment indices by 1), whereas the LinkedList does not (adjust the pointers of the nodes around the new element)
        for (int i = 0; i < 1E5; i++) {
            // Use add method that takes 2 parameters, the first parameter being the index of the List in which the new element is inserted, and the second parameter being the element being inserted
            list.add(0, i);
        }
        long end = System.currentTimeMillis();
        // Put end and start numerical values inside parentheses, so that their subtracted answer is computed before it is computed as a String to the rest of the String
        // By performing the observed operations between the instantiation of the start and end values, we can subtract start from end to determine the time it took for the operations to perform in milliseconds
        System.out.println("Time taken: " + (end - start) + " ms for " + type);
    }  
}

Application.main(null);
Comparing times between ArrayList and LinkedList:
Time taken: 1351 ms for ArrayList
Time taken: 3 ms for LinkedList
LinkedList before changes:
[1, 2, 3]
0
7
1
3
1
LinkedList after changes:
[1, 2, 3]

51. HashMap: Retrieving Objects via a Key

Notes:

  • In Java, the HashMap, which is a part of the Java Collections framework, is a data structure that saves items as key-value pairs. This means that a specific element in a HashMap consists of 2 parts: a key and a value, where the key is used to access its corresponding value. HashMaps are Generics, as they ask for 2 parameterized types, one to define the data type of the keys and the other to define that of the values. Basically, think of a HashMap as a look-up table that stores key-value pairs, with every key being unique and each key giving access to a certain value. If a key-value pair is appended to a HashMap but the key already exists, the new value will replace the already-existing value in the HashMap, and the key will remain the same (you can have duplicate values, but keys must be unique).
  • Most data structures, such as ArrayLists and HashMaps which are designed to hold objects, that are a part of the Java Collections framework use auto-boxing to automatically convert primitive data into their non-primitive/object counterparts (wrapper classes. e.g. int to Integer, which happens when appending primitive variables to data structures such as ArrayList). Unboxing is the process fo converting a wrapper class into its primitive data type counterpart (e.g. Integer to int, which happens when retrieving primitive values from data structures such as ArrayList).
  • HashMap is not an ordered data structure, as its appended element order does not necessarily match its retrieved element order (the retrieved element order is not always the same every time for HashMaps, since their elements are typically retrieved by their value properties via keys, not indices). HashMaps implement a hashing function, which essentially allows them to map keys to certain indices within an internal array, giving them the ability to have fast access times when retrieving values based on keys.
  • The Map.Entry<Key Type, Value Type> Generic method of the Map interface is used to retrieve a specific entry/element of a HashMap into an object that stores the key and value pair. The entrySet() method of the HashMap class creates a Set (collection of unique elements, focusing on the keys, which should be unique) and returns a set-view of all of the elements/entries in the HashMap. These 2 methods are essentially used in correspondence with each other to iterate through HashMaps, allowing programmers to access a specific entry, as well as useful properties such as the entry's key and value pair. The keySet() method of the HashMap class creates a Set/collection of all of the keys in the HashMap for iteration, while the values() method of the HashMap class creates a collection of all of the values (can have duplicates and values do not have to be unique) in the HashMap for iteration. Just like HashMaps, the collections created by keySet() and values() are not ordered.

Examples:

// Import HashMap class from java.util package
import java.util.HashMap;
// Import Map interface, which HashMap implements, from java.util package
import java.util.Map;

public class Application {
    public static void main(String[] args) {
        // Instantiate HashMap with key parameterized type Integer and value parameterized type String
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        // Add key-value pairs to the HashMap
        // Notice how key is passed first, then value
        // Auto-boxing converts key of type int to Integer
        map.put(5, "Five");
        map.put(6, "Six");
        map.put(7, "Seven");
        // Putting a key-value pair with a key that has already been appended will result in the value being updated with the new passed value
        map.put(5, "New Five");

        // Retrieve the corresponding value to the 5 key in the HashMap
        String text = map.get(5);
        System.out.println(text);

        // HashMap will return value of null for keys that don't exist within it
        System.out.println(map.get(0));

        // Iterate through key-value pairs of HashMap
        // Use Map.Entry to represent the variable type of a specific element (key-value pair), as well as its properties, in the map collection (HashMap)
        // Use entrySet() method to create a set view of all of the elements in the HashMap, so that we can iterate through each element in the HashMap using the set
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            // Unboxing converts key of type Integer to int
            // Get key and value of current HashMap entry/element in iteration
            int key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + ": " + value);
        }
    }
}

Application.main(null);
New Five
null
5: New Five
6: Six
7: Seven

52. Sorted Maps

Notes:

  • By default, HashMaps are not ordered, meaning that the order in which key-value pairs are appended to a HashMap does not always match the retrieval order, and the retrieval order is not always consistent.
  • The LinkedHashMap is a special type of HashMap that also implements the Map interface, and is actually ordered in that it maintains the appended order of elements. This means that the order in which elements are inserted into the LinkedHashMap matches the retrieval order.
  • The LinkedHashMap accomplishes this by having both an internal Doubly-LinkedList and a hash table. The hash table is used to store the key and value pairs, and the LinkedList is used to keep the order in which elements are appended to the LinkedHashMap. If the value of a particular key is updated, the element's index in the LinkedList stays the same, since the order of elements in the LinkedHashMap is determined by order of when each element was first appended. When elements are removed from the LinkedHashMap, they are removed from both the LinkedList and hash table.
  • The constructor of the LinkedHashMap can be used to specify to base the order of the LinkedHashMap on appended order or access order. In the case of using access order, the element that is most recently accessed will be automatically moved to the end of the LinkedList, marking it as the most recent appended element.
  • A hash code is a nearly-unique (limited to finite range of integers) integer identifier automatically generated by Java for objects. A HashMap basically keeps an internal hash table to keep key-value pairs. When a key-value pair is appended to a HashMap, the HashMap uses a hashing algorithm to determine the hash code of the key object (hence why HashMaps take non-primitive data types), then convert the hash code into an index with a hashing function to mark the key's location in the internal array (the array represents the hash table, where the index represents the hash code of the key, and the element represents the key-value pair itself). The key-value pair is then assigned to the bucket corresponding to the index in the array (reminder that primitive data are stored as actual values in an array, while object data are stored as references to their memory locations in the array), and in the case of retrieving a value from a key, the HashMap calculates the hash code of the inputted key, then uses the index representation of the hash code to find the key-value pair that matches the inputted key within the hash table. The internal array/hash table is dynamically resized using a load factor, which happens when the ratio of number of elements to the array size exceeds a certain capacity.
  • The TreeMap is special kind of HashMap that sorts its elements (by key) in natural order (or in a custom order if a custom comparator is defined by the programmer), implementing the NavigableMap interface and the SortedMap interface, which extends the Map interface. Like HashMap and LinkedHashMap, TreeMap provides sufficient methods for searching, insertion (can also update values for already-appended keys), and deletion.
  • Natural order typically means numerical and alphabetical order, and serves the basis as to how TreeMaps order the elements within it (by comparing keys). Each TreeMap has an underlying red-black binary search tree, which maintains the balanced height of the tree. The NavigableMap interfaces provides TreeMaps with further functionalities such as range-based key and value retrievals.
  • In Java, a tree is a fundamental data structure that represents a hierarchical structure of nodes. The root node is the ultimate parent of all the nodes under it, each node has zero or mode child nodes, and nodes are connected by edges (which are basically connections that link two nodes together and usually have directionality from parent node to child node).

Examples:

import java.util.HashMap;
// Import the LinkedHashMap class from the java.util package
import java.util.LinkedHashMap;
// Import the TreeMap class from the java.util package
import java.util.TreeMap;
// Import the Map interface from the java.util package
import java.util.Map;

class Temp { }

public class Application {
    public static void main(String[] args) {
        // Since the Temp class doesn't have a custom toString() method, this will print out an automatic String representation of the object
        // The text after the @ sign is the hexadecimal text that relates to the object's memory address
        System.out.println(new Temp());

        // These classes all implement the Map interface, so use Map as variable type to capture all these classes when used as parameter in method
        // Can make variable type Map, as the method testMap() primarily uses Map methods, and a common variable type Map can be used to group these different types of Maps, and this is practical in that Map is the variable type of the parameter of testMap()
        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
        // Use LinkedHashMap as viable option to keep keys and values in the order that they were put into the HashMap
        LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<Integer, String>();
        // Use TreeMap as viable option to sort elements (by key) in natural order, which usually implements numerical and alphabetical order
        TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>();

        System.out.println("HashMap (Unordered):");
        testMap(hashMap);

        System.out.println("LinkedHashMap (Insertion order):");
        testMap(linkedHashMap);

        System.out.println("TreeMap (Natural order):");
        testMap(treeMap);
    }

    public static void testMap(Map<Integer, String> map) {
        // HashMap, LinkedHashMap, and TreeMap all implement the Map interface, meaning a lot of their methods have been defined in the Map interface, and thus can be used by the object of variable type Map
        // Insertion
        map.put(9, "Fox");
        map.put(6, "Pig");
        map.put(7, "Dog");
        map.put(8, "Cat");
        map.put(1, "Cow");
        map.put(2, "Lion");
        // Deletion by key
        map.remove(6);
        // Update existing key
        map.put(1, "Jaguar");

        // Iteration and retrieval
        // keySet() creates a set that contains all the keys in the Map
        // Could use int instead of Integer for unboxing data types of values from the Map, but regardless, the values stays the same
        for (Integer key : map.keySet()) {
            String value = map.get(key);
            System.out.println(key + ": " + value);
        }
    }
}

Application.main(null);
REPL.$JShell$18C$Temp@5b7e4ce8
HashMap (Unordered):
1: Jaguar
2: Lion
7: Dog
8: Cat
9: Fox
LinkedHashMap (Insertion order):
9: Fox
7: Dog
8: Cat
1: Jaguar
2: Lion
TreeMap (Natural order):
1: Jaguar
2: Lion
7: Dog
8: Cat
9: Fox

53. Sets

Notes:

  • In Java, a Set, which extends the Collections interface, is a Generic data structure that stores an unordered (usually) (elements are stored using a method that maximizes efficiency when retrieving elements and checking for element uniqueness, as well as ensures a even spread of elements in the internal array/hash table) collection of unique elements.
  • The Set is a foundational interface that is implemented by classes such as HashSet, LinkedHashSet, and TreeSet, similar to the Map interface's relationship with HashMap, LinkedHashMap, and TreeMap.
  • It was mentioned before that Sets are usually unordered. However, this is only the case for the HashSet class, which can be considered the most basic/lightweight Set. LinkedHashSet, like LinkedHashMap, maintains insertion order, while TreeSet, like TreeMap, sorts elements by natural order.
  • HashSet utilizes a hash table to effectively and efficiently manage (insertion, deletion, and retrieval) the elements within it, as the hash table data structure gives HashSet a hashing function to map each element stored within it to a specific index in the internal array (which is basically the hash table).
  • The inner-workings of the hash table in the HashSet: An element added has its hash code calculated, which is then converted to an index for the internal array/hash table with a hash function. To handle internal collisions, each index in the hash table usually has a LinkedList that can store more than one element if multiple elements added have the same hash code (indicating duplicate elements. The HashSet will only use one of the elements in the LinkedList to ensure only unique elements are "saved" in the HashSet). Upon retrieval or removal of elements, the HashSet calculates the hash code then index for the inputted element, then traverses through the hash table using that index to find the actual element within the HashSet.
  • HashSet, like HashMap, is dynamically resizable as it increases the size of its internal array/hash table when the number of elements exceeds a certain capacity. LinkedHashSet and TreeSet have very similar inner-workings to HashSet, except they utilize additional data structures such as LinkedList (LinkedHashSet) and red-black binary search tree (TreeSet).

Examples:

// Necessary imports
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
import java.util.Set;

public class Application {
    public static void main(String[] args) {
        // Initialize set of variable type Set interface and object type HashSet class, as well as with parameterized type String
        // Set is the parent interface of HashSet, LinkedHashSet, and TreeSet, and so it can be used as the variable type for objects of those classes
        // HashSets are unordered
        Set<String> set1 = new HashSet<String>();
        // Check if set is empty
        // isEmpty() method returns true if the set has not elements within it, and false otherwise
        if (set1.isEmpty()) {
            System.out.println("Set 1 is currently empty");
        }

        // Insertion
        set1.add("dog");
        set1.add("cat");
        set1.add("mouse");
        // Adding duplicate items basically does nothing, since a Set only contains one instance of every distinct element
        set1.add("mouse");

        if (set1.isEmpty() == false) {
            System.out.println("Set 1 is not empty anymore");
        }

        // The toString() method for objects of classes from the Collections framework does a good job of printing a visual representation of these data structures
        System.out.println(set1);

        // LinkedHashSets maintain insertion order
        Set<String> set2 = new LinkedHashSet<String>();
        set2.add("dog");
        set2.add("cat");
        set2.add("mouse");
        // Duplicate items do not cause re-arrangement, as they are ignored. Here, elements are ordered based on when they were first appended
        set2.add("mouse");

        System.out.println(set2);

        // TreeSet sorts items based on natural order
        Set<String> set3 = new TreeSet<String>();
        // Natural order indicates alphabetical order for Strings
        set3.add("dog");
        set3.add("cat");
        set3.add("mouse");
        set3.add("mouse");
        // Removing item. Since duplicates are ignored, the distinct element itself is removed
        set3.remove("mouse");
        System.out.println(set3);

        // Iterating through Set using enhanced for loop, in turn allowing us to access every individual element in the Set
        for (String element : set1) {
            System.out.print(element + " ");
        }

        System.out.println();

        // Search for item within set
        // The contains() method returns true if the set does contain the specified item, and false otherwise
        if (set1.contains("dog")) {
            System.out.println("Contains dog");
        }
        if (set1.contains("aardvark")) {
            System.out.println("Contains aardvark");
        }

        // Intersection
        Set<String> set4 = new TreeSet<String>();
        set4.add("dog");
        set4.add("cat");
        set4.add("mouse");
        set4.add("bear");
        set4.add("lion");
        System.out.println(set4);

        Set<String> set5 = new TreeSet<String>();
        set5.add("dog");
        set5.add("cat");
        set5.add("giraffe");
        set5.add("ant");
        set5.add("monkey");
        System.out.println(set5);

        // HashSet is the most light weight type of Set
        // Passing set4 into intersectionSet's constructor means that intersectionSet is a copy of set4
        Set<String> intersectionSet = new HashSet<String>(set4);
        System.out.println(intersectionSet);
        // The retainAll method makes it so that intersectionSet only keeps elements found in both intersectionSet/set4 and set5
        intersectionSet.retainAll(set5);
        System.out.println(intersectionSet);

        // Differences
        Set<String> differencesSet = new HashSet<String>(set4);
        System.out.println(differencesSet);
        // The removeAll method with set5 as the argument makes it so that differencesSet, which is a copy of set4, only keeps elements that are not found in set5
        differencesSet.removeAll(set5);
        System.out.println(differencesSet);
    }
}

Application.main(null);
Set 1 is currently empty
Set 1 is not empty anymore
[mouse, cat, dog]
[dog, cat, mouse]
[cat, dog]
mouse cat dog 
Contains dog
[bear, cat, dog, lion, mouse]
[ant, cat, dog, giraffe, monkey]
[mouse, cat, bear, dog, lion]
[cat, dog]
[mouse, cat, bear, dog, lion]
[mouse, bear, lion]

54. Using Custom Objects in Sets and as Keys in Maps

Notes:

  • The equals() and hashCode() methods are both methods inherited from the Object grandparent class, and are typically overridden by the programmer to define what the programmer thinks determines equality between objects.
  • In conventionally overriding, the equals() method returns true if 2 objects are equal semantically (i.e. in terms of property values, unlike == which checks if 2 objects are literally the same object/memory location, which is the same as the default equals() method that is not overridden). When overriding the equals() method, programmer usually follow these core principles: reflexive, symmetric, transitive, consistent, and null values, which ensure that the equals() method is effective and consistent in comparing objects semantically.
  • The hashCode() method generates an almost-unique integer hash code (identifier) for a particular object, and hash codes are often used by data structures such as Maps and Sets, which utilize hash tables, during object management. Hash-based data structures calculate the hash code of an object to determine the location that object should be placed within its internal data structure(s), which includes a hash table (which is sort of like an array with indices and elements).
  • Oftentimes, when the equals() method is overridden, the hashCode() method is also overridden. This is because, with the hashCode() method being overridden the correct way, 2 objects that are considered equal semantically by the equals() method will have the same hash codes, thus effectively maintaining the important relationship between the equals() and hashCode() methods (as the hash code is an identifier of an object and its property values).
  • As hash-based data structures like Maps and Sets contain unique keys and elements, respectively, they by default cannot tell if 2 custom objects (objects of the Java default classes, like String, actually have overridden equals() methods that actually compare the contents of 2 objects) are actually equal semantically. Because of this, the equals() method should be overridden in the custom class to define what makes objects of it equal (usually defined semantically), so that these data structures can prevent duplicate custom objects (duplicate as in equal semantically) and thus maintain only distinct items. Furthermore, the hashCode() method should also be overridden, because 2 objects that are equal semantically should conventionally have the same hash codes; hash-based data structures use the hash code of objects to determine their position in the hash table, so 2 duplicate objects should have the same hash code to ensure data collisions are handled (with LinkedLists at each index to hold duplicate elements). It is important to note that hash-based data structures use both the equals() method and the hashCode() method to determine if 2 objects are distinct, as well as the different locations (in the hash table) of distinct objects.

Examples:

import java.util.Map;
import java.util.LinkedHashMap;
import java.util.Set;
import java.util.LinkedHashSet;

class Person {
    private int id;
    private String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{ID is: " + id + "; Name is: " + name + "}";
    }

    // Override the equals() and hashCode() methods to ensure objects of the Person class are compared semantically when checking for equality
    @Override
    public int hashCode() {
        // Hash algorithm to calculate hash code of object
        // Notice how the algorithm takes into account values of the attributes, indicating that attributes have an impact on the hash code of an object
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        // Check if objects refer to the same memory location with ==, if they are non-null, and if they are from the same class
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        // Check if the property values of both objects are equal (semantically)
        final Person other = (Person) obj;
        if (id != other.id) {
            return false;
        }
        if (name == null) {
            if (other.name != null) {
                return false;
            }
        } else if (!name.equals(other.name)) {
            return false;
        }
        return true;
    }
}

public class Application {
    public static void main(String[] args) {
        // Make object type LinkedHashMap, not Map, since you cannot create an object of an interface. You can, however, create an object of a class that implements the interface
        // LinkedHashMap maintains insertion order
        Map<String, Integer> map = new HashMap<String, Integer>();     
        map.put("one", 1);
        map.put("two", 2);
        map.put("three", 3);
        // Keys in Maps are unique, which means that the value of this particular key is updated with that of the duplicate key
        map.put("one", 1);
        // The keySet() method creates a set (collection of unique elements) of all the keys in the Map, which are all the same data type as defined by the parameterized type in the Map
        for (String key : map.keySet()) {
            System.out.println(key + ": " + map.get(key));
        }

        Set<String> set = new LinkedHashSet<String>();
        set.add("dog");
        set.add("cat");
        set.add("mouse");
        // A Set only contains distinct elements, which means duplicate items are essentially ignored in terms of what data is saved
        set.add("cat");
        System.out.println(set);

        // Map and Set interactions with custom objects
        // Create custom object from the Person class we created ourselves
        Person person1 = new Person(0, "Bob");
        Person person2 = new Person(1, "Sue");
        Person person3 = new Person(2, "Mike");
        Person person4 = new Person(1, "Sue");

        // In terms of attribute values, person2 and person4 are equal semantically
        // However, Maps and Sets by default view them as distinct objects, as they do not compare them in terms of their properties
        // By overriding the equals() and hashCode() methods, we can determine what counts as equal in terms of properties for objects of this particular class (and any child classes of the class. Will have to override again for child classes to account for properties specific to the child classes)
        // Sets and Maps use the equals() and hashCode() methods (based on what boolean value they return) to determine if 2 objects are distinct to each other
        // After overriding these 2 methods, person2 and person4 will be considered equal semantically by Sets and Maps, and thus not distinct to each other

        // Map stores keys as variable type Person, which accounts for objects created from the Person class
        Map<Person, Integer> customMap = new LinkedHashMap<Person, Integer>();
        customMap.put(person1, 1);
        customMap.put(person2, 2);
        customMap.put(person3, 3);
        customMap.put(person4, 1);

        for (Person key : customMap.keySet()) {
            System.out.println(key + ": " + customMap.get(key));
        }

        // Set stores elements as variable type Person
        Set<Person> customSet = new LinkedHashSet<Person>();
        customSet.add(person1);
        customSet.add(person2);
        customSet.add(person3);
        customSet.add(person4);
        System.out.println(customSet);
    }
}

Application.main(null);
one: 1
two: 2
three: 3
[dog, cat, mouse]
Person{ID is: 0; Name is: Bob}: 1
Person{ID is: 1; Name is: Sue}: 1
Person{ID is: 2; Name is: Mike}: 3
[Person{ID is: 0; Name is: Bob}, Person{ID is: 1; Name is: Sue}, Person{ID is: 2; Name is: Mike}]

55. Sorting Lists

Notes:

  • The Collections class, which is a part of the Java Collections framework, provides a variety of functionalities in the form of static methods (static methods can be called directly using dot notation with the class name, meaning you do not necessarily need to create an object of the class to call these methods). For example, the sort() method of the Collections class by default sorts Lists in ascending (least to greatest) order based on a natural ordering comparator (usually numerical and alphabetical order). The elements in the Lists need to implement the Comparable interface (Wrapper classes and Strings automatically implement it, by custom classes need to manually implement it), which is an interface that allows objects to be compared to each other. Furthermore, programmers can use the overloaded (different parameters) sort() method to define a custom comparator to replace the natural ordering comparator.
  • The Comparator Generic/template interface is implemented by classes defined by programmer as custom comparators. When the programmer does not want to compare objects on the basis of the natural ordering defined by the Comparable interface, which is implemented by the objects being compared, they create a custom class that implements the Comparator interface, which takes a parameterized type that indicates what type of data is being compared. With this custom class, the programmer can define the type of ordering the custom comparator is based on. The compare() method of the Comparator interface takes 2 object parameters of the defined parameterized type by the programmer, then returns a negative integer if the first object is less than the second object, returns 0 if both objects are considered equal, and returns a positive integer if the first object is greater than the second object.
  • With a custom comparator, objects of any class can now be sorted (like custom objects instead of wrapper classes and Strings), even their classes do not implement the Comparable interface. Custom comparators can be used in correspondence with the sort() method of the Collections class to replace the default natural ordering sorting. By default, the sort() method utilizes the natural ordering comparator provided by Comparable, but with a custom comparator, the sort() method utilizes the compare() method provided by the implemented Comparator.
  • The compareTo() method of the Comparable interface compares 2 objects based on natural ordering, and returns a negative integer if the first object (the one the method is called on) is less than the second object (the one passed as an argument), 0 if both objects are equal, and a positive integer if the first object is greater than the second object. It basically follows the same logic as the compare() method from the Comparator interface.
  • To sort in descending (greatest to least) order for a custom comparator, just reverse the usual (usual as in ascending) sign of the return value(s), meaning if the first object is less than the second object, return a positive integer, if they are equal, return 0, and if the first object is greater than the second object, return a negative integer.

Examples:

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.lang.Comparable;

class Person {
    private int id;
    private String name;
    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return "Person{ID: " + id + ", Name: " + name + "}"; 
    }
}

// Custom comparator that sorts Strings in ascending order of String length
// Define parameterized type of Comparator interface, as well as the data types of the compare() method's parameters, as Strings
class StringLengthComparator implements Comparator<String> {
    // Implement Comparator's method
    @Override
    public int compare(String s1, String s2) {
        int length1 = s1.length();
        int length2 = s2.length();
        // Return positive integer, if length of first String is greater than that of second String
        // Return negative integer, if length of first String is less than that of second String
        // Return 0 if length of first String is equal to that of second String
        if (length1 > length2) {
            return 1;
        } else if (length1 < length2) {
            return -1;
        }
        return 0;
    }
}

// Custom comparator that sorts Strings in descending order alphabetically
class ReverseAlphabeticalComparator implements Comparator<String> {
    @Override
    public int compare(String s1, String s2) {
        // Use compareTo() method to concise code and still effectively compare both Strings by natural order
        // Make return value negative to ensure descending order
        return -s1.compareTo(s2);
    }
}

public class Application {
    public static void main(String[] args) {
        // Variable type List interface and object type ArrayList class, with parameterized type String, as ArrayList is a Generic data structure
        List<String> animals = new ArrayList<String>();
        animals.add("tiger");
        animals.add("lion");
        animals.add("cat");
        animals.add("snake");
        animals.add("mongoose");
        animals.add("elephant");

        // ArrayList is an ordered data structure, meaning each of its elements has a consecutive index
        // toString() method of classes of the Collections framework provides a clear visual representation the Collections data structures
        System.out.println("String ArrayList before sort: " + animals);
        // Use sort() method to sort list in natural ascending order (in this case alphabetical)
        // Call the sort() method directly from the Collections class name
        Collections.sort(animals);
        System.out.println("String ArrayList after natural ascending sort: " + animals);

        // Data structures of the Collections framework store mostly objects, so use wrapper class instead of primitive type definition in the parameterized type
        List<Integer> numbers = new ArrayList<Integer>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(37);
        numbers.add(73);
        numbers.add(20);
        System.out.println("Integer ArrayList before sort :" + numbers);
        // Sort in natural order (i.e. numerical here)
        Collections.sort(numbers);
        System.out.println("Integer ArrayList after natural ascending sort: " + numbers);
        
        // Sort List based on custom-defined comparator
        Collections.sort(animals, new StringLengthComparator());
        System.out.println("String ArrayList after String length ascending sort: " + animals);

        Collections.sort(animals, new ReverseAlphabeticalComparator());
        System.out.println("String ArrayList after descending natural sort: " + animals);

        // Sort List based on custom-defined comparator (directly implementing Comparator interface) which is represented as anonymous class
        Collections.sort(numbers, new Comparator<Integer>() {
            // Parameterized data types have to be non-primitive, so use wrapper classes even in parameters
            // Reverse the return values for ascending to get appropriate return values for descending
            // compareTo() method also follows natural sort, so that can be an alternative code to this
            @Override
            public int compare(Integer i1, Integer i2) {
                if (i1 > i2) {
                    return -1;
                } else if (i1 < i2) {
                    return 1;
                }
                return 0;
            }
        });
        System.out.println("Integer ArrayList after descending natural sort: " + numbers);

        // List of custom objects
        List<Person> people = new ArrayList<Person>();
        // Initialize object and add that to the ArrayList on the same line
        // Variable type Person automatically accounts for object type Person and any objects of child classes of Person
        people.add(new Person(1, "Joe"));
        people.add(new Person(3, "Bob"));
        people.add(new Person(4, "Claire"));
        people.add(new Person(2, "Sue"));
        // System.out.println applies not only to the data structure, but also the objects within it
        System.out.println("Custom object ArrayList before sort: " + people);
        // Custom objects need their own custom comparator when being sorted, since natural ordering by default does not apply to them
        Collections.sort(people, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                if (p1.getId() > p2.getId()) {
                    return 1;
                } else if (p1.getId() < p2.getId()) {
                    return -1;
                }
                return 0;
            }
        });
        System.out.println("Custom object ArrayList after ascending sort by id: " + people);
        Collections.sort(people, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                return p1.getName().compareTo(p2.getName());
            }
        });
        System.out.println("Custom object ArrayList after ascending sort by name: " + people);
    }
}

Application.main(null);
String ArrayList before sort: [tiger, lion, cat, snake, mongoose, elephant]
String ArrayList after natural ascending sort: [cat, elephant, lion, mongoose, snake, tiger]
Integer ArrayList before sort :[3, 1, 37, 73, 20]
Integer ArrayList after natural ascending sort: [1, 3, 20, 37, 73]
String ArrayList after String length ascending sort: [cat, lion, snake, tiger, elephant, mongoose]
String ArrayList after descending natural sort: [tiger, snake, mongoose, lion, elephant, cat]
Integer ArrayList after descending natural sort: [73, 37, 20, 3, 1]
Custom object ArrayList before sort: [Person{ID: 1, Name: Joe}, Person{ID: 3, Name: Bob}, Person{ID: 4, Name: Claire}, Person{ID: 2, Name: Sue}]
Custom object ArrayList after ascending sort by id: [Person{ID: 1, Name: Joe}, Person{ID: 2, Name: Sue}, Person{ID: 3, Name: Bob}, Person{ID: 4, Name: Claire}]
Custom object ArrayList after ascending sort by name: [Person{ID: 3, Name: Bob}, Person{ID: 4, Name: Claire}, Person{ID: 1, Name: Joe}, Person{ID: 2, Name: Sue}]

56. Natural Ordering

Notes:

  • Natural ordering, which is also referred to as lexicographic (principles of the dictionary) ordering or alphanumeric ordering, is essentially a sorting basis that sorts elements either numerically (numbers), alphabetically (words), or alphanumerically (both numbers and words, where all numbers are first considered, and then the words in alphabetical order).
  • The Collection Generic (takes parameterized type just like its sub-interfaces) interface provides an architectural foundation for managing data structures of the Java Collections framework, as it is implemented (directly by the classes themselves or indirectly through the sub-interfaces those classes implement) by different types of Lists, Sets, and Queues. As such, it provides fundamental operations for these diverse data structures such as adding, removing, querying (e.g. check if empty), updating, and iterating. The Collection interface has a variety of sub-interfaces (interface inheritance) such as List, Set, and Queue, which each define more specifically the characteristics and inner-workings of the data structures that fall under them.
  • The Comparable Generic interface is typically used by a class (Comparable is automatically implemented by String and Wrapper classes) implementing it to define the natural ordering sorting basis of that class. Once a custom class effectively implements the compareTo() (ascending: return negative integer (current object is sorted to an earlier position in the data structure) if current object is less than specified argument object, return 0 (both objects are next to each other) if both objects are equal, and return a positive integer (current object is sorted to a later position) if the current object is greater than the specified argument object. descending: reverse the signs of the integer returned) method of Comparable, its custom objects can then be sorted in custom natural order within key data structures of the Java Collections framework.

Examples:

// Necessary imports
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.TreeSet;
import java.lang.Comparable;

// Make custom class Person implement Comparable interface with parameterized type Person
// The Comparable interface here allows for Person custom objects to be compared to each other on the basis of a natural order that will need to be later defined here
class Person implements Comparable<Person> {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String toString() {
        return "Person{" + name + "}";
    }

    // Override hashCode() and equals() methods so that Sets can determine if objects of Person are distinct or not
    @Override
    public int hashCode() {
        // The value of the hash code is affected by the value of the name attribute, meaning objects of Person that are considered equal should have the same hash code
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        // Use variable type Object super class, as Object accounts for all child classes, in case an object of a different class to the current object is passed
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        // Once both objects are confirmed to have the same class, down-cast the other object to the appropriate class variable type
        final Person other = (Person) obj;
        if (name == null) {
            if (other.name != null) {
                return false;
            }
        } else if (!name.equals(other.name)) {
            return false;
        }
        return true;
    }

    // The compareTo() method is similar to that of the compare() method of the Comparator interface, and defines how Person objects should be compared in the custom order (usually defined as the natural order of these custom objects)
    @Override
    public int compareTo(Person person) {
        // Natural order by name length numerically ascending
        int len1 = name.length();
        int len2 = person.name.length();
        if (len1 > len2) {
            return 1;
        } else if (len1 < len2) {
            return -1;
        } else {
            // Do not return 0 automatically if 2 names have the same length, as we need to prevent conflict with the equals() method
            // This is because for TreeSet and TreeMap, the return value of 0 from the compareTo() method may conflict with the return value from the equals() method within a class
            // Since TreeSet and TreeMap use both compareTo() and equals() to determine the content and order of the elements within them, if compareTo() deems 2 values as equal, when equals() does not, this conflict may result in TreeSet or TreeMap ignoring some distinct elements which were deemed equal by compareTo()
            /* return 0; */

            // Since the name attribute is of type String, the version of the compareTo() method used here will be that of the parameterized String class type, thus showing the usefulness of parameterized type (different data types should be worked with differently)
            // Even though name is a private attribute, we do not need getters or setters to access it from the other object, since it is being accessed within the class it was originally defined in
            // If 2 objects' names have the same length, compare them alphabetically (actually looks through content of Strings). This makes it so that the return values of equals() and compareTo() no longer conflict with each other, as the compareTo() method now actually searches through the contents of name attribute values
            // Alternatively, we could have instead modified the equals() method to have consistent return values with the compareTo() method
            return name.compareTo(person.name);
        }
    }
}

public class Application {
    public static void main(String[] args) {
        // Define ArrayList with parameterized type custom object of variable type Person
        // Lists need to be manually sorted
        List<Person> list = new ArrayList<Person>();
        // Define TreeSet with parameterized type Person, which stores elements automatically sorted in natural order 
        // However, since Person is a custom class, we need to manually make it implement the Comparable interface, as well as define its natural ordering
        // This way, the Collections sort() method will work on data structures that store Person objects, and TreeSet can save Person objects and automatically sort them by the manually defined natural order
        Set<Person> set = new TreeSet<Person>();

        addElements(list);
        // Sort ArrayList with elements of variable and object type Person, which in turn implements the Comparable interface (allows for Collections class's sort() method to work in the first place), by natural order
        Collections.sort(list);
        addElements(set);

        showElements(list);
        System.out.println();
        showElements(set);
    }

    // static so this method can be called directly inside the static main() method
    // private so this method can only be called inside the class (however, this method can be indirectly called outside of the class if it is called within a public class in the same class)
    // The Collection interface is extended by List and Set interfaces, so data structures that fall under variable type List and Set also by inheritance fall under variable type Collection
    private static void addElements(Collection<Person> collection) {
        collection.add(new Person("Joe"));
        collection.add(new Person("Sue"));
        collection.add(new Person("Juliet"));
        collection.add(new Person("Claire"));
        collection.add(new Person("Mike"));
    }

    private static void showElements(Collection<Person> collection) {
        for (Person element : collection) {
            System.out.print(element + " ");
        }
        System.out.println();
    }
}

Application.main(null);
Person{Joe} Person{Sue} Person{Mike} Person{Claire} Person{Juliet} 

Person{Joe} Person{Sue} Person{Mike} Person{Claire} Person{Juliet} 

57. Queues

Notes:

  • In Java, the Queue is a Generic Java Collections framework data structure that follows the First-In-First-Out (FIFO) ordering principle (establishes how elements in a data structure are ordered and managed), meaning that the first element appended to a Queue will be the first element to be removed from the Queue. A real-life example of a Queue would be like a line of people purchasing tickets, where it is essentially first-come-first-serve.
  • The front of a Queue is known as the head, while the back of a Queue is known as the tail. Elements are removed from the head of the Queue (Enqueue), and elements are appended to the back of the Queue (Dequeue).
  • The Queue interface is implemented by numerous classes, including LinkedList, ArrayDeque, and PriorityQueue, which each have a slightly different implementation of Queue, with LinkedList being the most standard implementation. Queues are oftentimes used to accomplish tasks such as handling multi-threaded environments and dealing with asynchronous programming.
  • The inner-workings of a LinkedList-based Queue involves an internal LinkedList (each node has data and next node pointer), where the head of the Queue points to the first node in the LinkedList, and the tail of the Queue points to the last node in the LinkedList. The Enqueue operation will append a new node to the end of the LinkedList, while the Dequeue operation will remove the node at the front of the LinkedList.
  • Lists like LinkedList and ArrayList are dynamically resizable data structures, meaning that LinkedList-based Queues typically do not have a maximum item capacity. However, this isn't the case of the ArrayBlockingQueue class (implements BlockingQueue interface, which extends Queue interface), which a part of the java.util.concurrent package of the Java Collections framework.
  • BlockingQueues provide blocking/waiting operations when the Queue is full or empty (e.g. one thread will enqueue elements, a separate thread will dequeue elements, and both threads will depend on each other in the case of blocking), allowing for multiple threads (a thread is a sequence of code instructions that is to be executed by the CPU, while a process is an independent instance of a program's execution, containing memory space, system resources, and a thread(s). A process can contain multiple threads, which enables the ability for the program to multi-task and share resources amongst threads) to effectively communicate and synchronize properly.
  • ArrayBlockingQueue contains an internal array, and is initialized with a specified fixed size capacity (maximum size of the Queue), meaning when it is full, any further enqueued elements will need to be blocked until space becomes available again, and when it is empty, any further dequeued elements will need to be blocked until an element becomes available. Because of this, it provides blocking versions of Enqueue and Dequeue operations (will need to initialize with variable type BlockingQueue interface, so that ArrayBlockingQueue can implement the methods specific to BlockingQueue but not Queue interface), which are utilized when the ArrayBlockingQueue is empty or full and in a multi-thread environment. Not only that, ArrayBlockingQueue is thread-safe, in that it works well in allowing concurrent access in a multi-thread environment (e.g. one thread adds elements to Queue, while another thread removes elements to Queue concurrently, and the special Enqueue and Dequeue operations provided by the BlockingQueue interface make it easier for these threads to synchronize together), and thus effective synchronization amongst multiple threads.

Examples:

// Necessary imports
import java.util.Queue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;

public class Application {
    public static void main(String[] args) {
        // Initialize Queue (FIFO) of variable type Queue interface and object type ArrayBlockingQueue class, with parameterized type Integer wrapper class
        // Specify in ArrayBlockingQueue constructor that this Queue can only hold a maximum of 3 items
        Queue<Integer> q1 = new ArrayBlockingQueue<Integer>(3);
        // Non-blocking operations implemented from Queue interface
        // q1.element() will throw NoSuchElementException here, since the Queue does not have any elements yet

        // Append elements to tail of Queue (Enqueue)
        q1.add(10);
        q1.add(20);
        q1.add(30);

        // Retrieve head of Queue
        System.out.println("Head of Queue is: " + q1.element());

        // Will throw an unchecked/runtime exception (we aren't forced to handle it by the program, but we will nonetheless), since adding another element will exceed the BlockingQueue's item capacity
        try {
            q1.add(40);
            // IllegalStateException to handle illegal operations on the Queue depending on its state
        } catch (IllegalStateException e) {
            System.out.println("Tried to add too many items to the Queue.");
        }

        // Iterate through queue using enhanced for loop (will not work for every type of Queue), not standard for loop since we can't access items of Queues using indices
        // We can unbox values of the Queue to int primitive type, but that isn't necessary
        // Scope of this value variable is restricted to that of the for loop, since it is defined in the for loop parameters
        for (Integer value : q1) {
            System.out.println("Queue value: " + value);
        }

        // Scope of this value variable is restricted to that of the main() method
        Integer value;
        // Remove element from head of Queue (Dequeue) and store it in a variable
        value = q1.remove();
        System.out.println("Removed from Queue: " + value);
        System.out.println("Removed from Queue: " + q1.remove());
        System.out.println("Removed from Queue: " + q1.remove());
        // Will throw runtime exception because we are trying to remove an element from a Queue that is empty
        try {
            System.out.println("Removed from Queue: " + q1.remove());
            // NoSuchElementException to handle instance when Queue tries to get value of newly removed element when the Queue is already empty
        } catch (NoSuchElementException e) {
            System.out.println("Tried to remove too many items from the Queue.");
        }

        Queue<Integer> q2 = new ArrayBlockingQueue<Integer>(2);
        // offer() method will append element to tail of Queue and return true if possible, but will return false if it cannot append an element
        // Will return true and append element to Queue
        System.out.println("Queue offer: " + q2.offer(10));
        q2.offer(20);
        if (q2.offer(30) == false) {
            System.out.println("Offer failed to add third item.");
        }

        // Cannot make variable value, again, since it has already been defined in a wider scope, and will apply to inner scopes
        for (Integer value2 : q2) {
            System.out.println("Queue value: " + value2);
        }

        // poll() method will remove and return element at the head of the Queue, but will return null if there is not element at the head of the Queue
        System.out.println("Queue 2 poll: " + q2.poll());
        System.out.println("Queue 2 poll: " + q2.poll());
        System.out.println("Queue 2 poll: " + q2.poll());

        // peek() method returns head of Queue, but will return null if the Queue doesn't have any elements
        System.out.println("Queue 2 peek: " + q2.peek());

        // Blocking operations implemented from BlockingQueue interface specifically. Use these in a multi-thread environment
        /*BlockingQueue<Integer> q3 = new ArrayBlockingQueue<Integer>(2);
        // Enqueue operation that utilizes blocking (waiting)
        try {
            q3.put(10);
            q3.put(20);
            q3.put(30);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // Dequeue operation that utilizes blocking
        try {
            q3.take();
            q3.take();
            q3.take();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }*/
    }
}

Application.main(null);
Head of Queue is: 10
Tried to add too many items to the Queue.
Queue value: 10
Queue value: 20
Queue value: 30
Removed from Queue: 10
Removed from Queue: 20
Removed from Queue: 30
Tried to remove too many items from the Queue.
Queue offer: true
Offer failed to add third item.
Queue value: 10
Queue value: 20
Queue 2 poll: 10
Queue 2 poll: 20
Queue 2 poll: null
Queue 2 peek: null

58. Using Iterators

Notes:

  • In Java, the Iterator Generic (template type, meaning we have to specify parameterized type of the elements stored within it) interface of the Java Collections framework is useful for traversing through the elements of core data structures such as List, Set, and Map, which are all a part of the Java Collections framework. The Iterator interface provides methods that are effective in iterating through the elements of a certain type of collection, one by one, without necessarily interfering the collection's implementation details or inner-workings.
  • The iterator() method of the Collection interface (which extends from the Iterable interface and actually inherits the iterator() method, and is implemented by just about every type of collection class in the Java Collections framework) from the Java Collections framework essentially returns a Generic (has parameterized data type that will match the data type of the elements stored by the data structure) Iterator object when called on a data structure (Iterator object derived from that data structure), and this Iterator object provides further methods (obtained from Iterator interface, but each collection's way of implementing Iterator's methods may be different from each other) that allow the elements of the data structure to be accessed one by one, thus enabling iteration.
  • An Iterator object can only be derived from a data structure if that type of collection implements the Iterable interface, since classes that implement Iterable will have the correct implementation of the iterator() method that was originally declared in Collection to properly create an Iterator Generic object. Just about all of the data structures in the Java Collections framework implement Iterable (more on Iterable later), as important interfaces like List, Set, and Map all extend the Iterable interface, and by inheritance all of the classes that implement them will have to by extension implement Iterable.
  • The ListIterator interface of the Java Collections framework provides additional methods useful for iterating through Lists, not only forwards, but also backwards, unlike the standard Iterator interface. ListIterator objects can be created by calling the listIterator() method on Lists that implement Iterable.

Examples:

import java.util.LinkedList;
import java.util.Iterator;

public class Application {
    public static void main(String[] args) {
        LinkedList<String> animals = new LinkedList<String>();
        animals.add("fox");
        animals.add("cat");
        animals.add("dog");
        animals.add("rabbit");
        System.out.println("Iteration with enhanced for loop:");
        // Standard way of iteration through List is using for loop by list index or enhanced for loop
        // For-each loops actually sort of utilize Iterator behind-the-scenes
        for (String animal : animals) {
            System.out.println(animal);
            // animals.remove(2);
            // The remove() method of LinkedList will not work here, as it will result in a ConcurrentModificationException due to an iteration operation and removal operation happening at the same time
        }
        System.out.println();

        // Create Iterator object with parameterized type String from the iterator() method used on the LinkedList, and store that in a variable with variable type Iterator with parameterized type String (has to match that of the Iterator object created from the collection)
        Iterator<String> it = animals.iterator();
        System.out.println("Iteration with Iterator object:");
        // hasNext() method of Iterator interface returns true if the Iterator object still has another element in front to access, and returns false otherwise
        while (it.hasNext()) {
            // next() method provided by Iterator interface, when called on the Iterator object, accesses and returns the next element in the collection
            // When the next() method is first called, it accesses the first element in the data structure
            String animal = it.next();
            System.out.println(animal);

            if (animal.equals("cat")) {
                // remove() method of Iterator interface removes the current element, which is the one last returned by the next() method, from the actual collection itself
                // This will not result in a ConcurrentModificationException, since the element being removed as just been iterated through, and Iterator will continue traversing through the elements after it
                it.remove();
            }
        }
        System.out.println();

        System.out.println("LinkedList after calling remove() method on Iterator object: " + animals.toString());
        System.out.println();

        // Create ListIterator object with parameterized type String with listIterator() method
        ListIterator<String> lit = animals.listIterator();
        System.out.println("Iteration with ListIterator object:");
        System.out.println("Forwards:");
        while (lit.hasNext()) {
            String animal = lit.next();
            System.out.println(animal);
            if (animal.equals("fox")) {
                // set() method updates element last accessed in the collection
                lit.set("lion");
                // add() method adds element right before the element that would currently be accessed by the next() method (that element would still be accessed by next() after appending, as the element added will be skipped by next())
                lit.add("cat");
            }
        }
        System.out.println();

        System.out.println("Backwards:");
        // hasPrevious() returns true if ListIterator object still has another element behind to access in the List, and returns false otherwise
        while (lit.hasPrevious()) {
            // previous() method accesses and returns the previous element in the List, and will return the last element if called for the first time at the end of the List by the ListIterator object
            String animal = lit.previous();
            System.out.println(animal);
        }
        System.out.println();
    }
}

Application.main(null);
Iteration with enhanced for loop:
fox
cat
dog
rabbit

Iteration with Iterator object:
fox
cat
dog
rabbit

LinkedList after calling remove() method on Iterator object: [fox, dog, rabbit]

Iteration with ListIterator object:
Forwards:
fox
dog
rabbit

Backwards:
rabbit
dog
cat
lion

59. Implementing Iterable

Notes:

  • In Java, the Iterable Generic interface, which a part of the Java Collections framework and the java.lang package, is implemented by most of the data structure classes in the Java Collections framework.
  • The iterator() method provided by the Iterable interface returns an Iterator object (which implements the methods provided by the Iterator interface) which enables iteration operations over the collection classes that implement Iterable. Basically, collection classes that successfully implement the Iterable interface and have an effective iterator() method implementation will have the ability to derive an Iterator object from themselves, as well as be iterated through using an enhanced for loop.
  • The URL class provides an effective way to represent urls (Uniform Resource Locaters), as well as open connections to resources on the Web from an url, and download those resources to have their content read. The InputStreamReader class, when reading from downloaded content or from files, converts the byte streams from the InputStream of the content to actual character streams. The BufferedReader class provides an efficient and effective way to actually buffer and read the text from a character input stream, and is used in correspondence with InputStreamReader to read text content from resources such as files. The Java InputStream class essentially helps represent an ordered stream of bytes read from resource data, and buffering is basically the operation of temporarily storing resource data in memory (as a buffer, which is a linear sequence of primitive data), before it is sent or received over a network.

Examples:

import java.util.LinkedList;
import java.util.Iterator;
import java.net.URL;
import java.io.InputStreamReader;
import java.io.BufferedReader;

// Custom collection class that stores urls
// Since UrlLibrary implements the Iterable Generic interface with String parameterized type (the elements iterated through are Strings, but we can convert them during the actual iteration), we can now iterate through it like a data structure after implementing the iterator() method, although the elements iterated through will need to be Strings as defined in the template interface Iterable here
class UrlLibrary implements Iterable<String> {
    // Internal data structure to help store and order urls
    private LinkedList<String> urls = new LinkedList<String>();

    // Create private inner class (which has access the properties of the outer class), which implements the Iterator interface with parameterized type String (initial data type of the elements iterated through), giving it useful iteration operations like next() and hasNext()
    // This class serves the purpose of providing additional operations in the iteration, such as converting the urls Strings into URL objects, downloading the html pages linked to the urls, and reading the html content in the html pages
    private class UrlIterator implements Iterator<String> {
        // Instance variable index to save current position of UrlIterator in the UrlLibrary custom data structure
        private int index = 0;

        @Override
        public boolean hasNext() {
            // Check whether or not the current index is below the size (total number of elements) of the internal LinkedList
            return index < urls.size();
        }

        @Override
        public String next() {
            // StringBuilder object to have mutable String
            StringBuilder sb = new StringBuilder();
            try {
                 // Get the url at the current index, and save it in an URL object
                URL url = new URL(urls.get(index));

                // Use InputStreamReader to convert the input byte streams provided by the openStream() method of the URL class, then pass that into BufferedReader to buffer the data and convert it to readable text content
                BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
                String line = null;
                while ((line = br.readLine()) != null) {
                    // Read html page line by line, and append each line of the page to the StringBuilder
                    sb.append(line);
                    sb.append("\n");
                }

                // Close input stream (using BufferedReader since that is the outer-most stream reader class) to prevent memory leaks
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

            // Increment index by 1
            index++;

            // Return the StringBuilder, which contains the content of the current html page
            return sb.toString();
        }

        @Override
        public void remove() {
            urls.remove(index);
        }
    }

    // Constructor that will automatically add urls to the LinkedList
    public UrlLibrary() {
        urls.add("https://www.google.com");
        urls.add("https://www.todoist.com");
    }

    // iterator() method to provide a Iterator object from UrlLibrary
    // Since the enhanced for loop utilizes Iterator object behind-the-scenes, having an iterator() method allows UrlLibrary to be iterated through using an enhanced for loop
    // This iterator() method iterates through the urls as Strings, access the html pages linked to those urls, and read the content of those html pages
    @Override
    public Iterator<String> iterator() {
        // UrlIterator implements Iterator interface, which means it can be considered an Iterator object when initialized (as it has variable type Iterator)
        return new UrlIterator();
    }

    // This iterator() method iterates through the urls as Strings and prints them as Strings
    /*@Override
    public Iterator<String> iterator() {
        // Return the Iterable object of the internal LinkedList, since it already has a defined iterator() method and is used to store the urls anyway
        // Upon calling the iterator() method of UrlLibrary, we will get an Iterator object that iterates through the elements of the LinkedList, one by one
        return urls.iterator();
    }*/
}

public class Application {
    public static void main(String[] args) {
        UrlLibrary urlLibrary = new UrlLibrary();
        // For-each loop utilizes the Iterator object of the UrlLibrary custom class, which means UrlLibrary needs to implement the Iterable interface and the iterator() method
        // The enhanced for loop calls the next() method of the Iterator object of UrlLibrary (provided by iterator() method) in each iteration
        for (String html : urlLibrary) {
            // Print out html code of the html pages linked to the urls stored in the custom collection class, as well as the number of characters they each have
            System.out.println(html.length());
            System.out.println(html);
        }
    }
}

Application.main(null);
18300
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for." name="description"><meta content="noodp" name="robots"><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="R7r_B3hvxMHVXB1veGv-Hw">(function(){var _g={kEI:'qrjGZPSLB-X7kPIPnbGlyA0',kEXPI:'0,18168,1341241,6058,207,2414,2390,2316,383,246,5,1129120,1749,13,1196019,620,380090,16114,28684,22430,1362,12312,2822,14765,4998,17075,38444,885,1987,2891,3926,7828,606,29843,30847,15324,781,1244,1,16916,2652,4,1528,2304,29062,13065,11443,2215,2980,1457,22559,6678,7596,1,8710,33444,2,16395,342,23024,5679,1021,31122,4567,6256,23421,1252,5835,19300,5017,2467,445,2,2,1,26632,8155,7381,2,3,15964,874,9625,10008,7,1922,9779,42459,20198,928,5122,14087,14,82,16514,3692,109,2412,5856,3785,15456,5122,1542,1488,6111,5040,4665,1212,592,5209,2525,2738,2885,2711,9764,7265,7423,2600,978,2984,477,1158,7948,891,4654,347,601,545,780,2367,2754,5811,7915,4951,9512,2420,1271,2041,372,1179,775,5208365,175,1066,2,36,8797901,3311,141,795,19735,1,1,346,6639,503,334,3,1,4,22,3,3,11,15,4,47,99,11,94,1,11,1,26,6,6,49,4,50,10,23942527,2773820,1270287,5417,11255,32950,6440,1400550,342430,23416840,3326,275,255,2961,1346,3614,1022,2853,737,2258,1679,882,847,235,835,266,695,1294,103,198,366,1,222,499,2466,433,1271,81,1,942,457,3231,13,243,1491,201,274,2157,326,467,799,31,469,179,120,2645,4,3,2,814,285,2403,803,1034,215,5,261,33,265,321,131,398,6,1773,1,689,76,774,442,36,591,2,150,1681,3,494,667,6,1,66,733,673,256,163,298,71,762,81,617,1,645,305,43,3,830,2,913,2,1865,1243,4,55,523,747,116,435,43,4,418,417,8,337,204,294,110,49,531,401,124,192,390,103,1,42,457,101,41,3,789,20,476,405,1,2,716,567,1,123,686,1,4,93,305,293,3004,279',kBL:'Pu8j',kOPI:89978449};(function(){var a;(null==(a=window.google)?0:a.stvsc)?google.kEI=_g.kEI:window.google=_g;}).call(this);})();(function(){google.sn='webhp';google.kHL='en';})();(function(){
var h=this||self;function l(){return void 0!==window.google&&void 0!==window.google.kOPI&&0!==window.google.kOPI?window.google.kOPI:null};var m,n=[];function p(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));)a=a.parentNode;return b||m}function q(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute("leid")));)a=a.parentNode;return b}function r(a){/^http:/i.test(a)&&"https:"===window.location.protocol&&(google.ml&&google.ml(Error("a"),!1,{src:a,glmm:1}),a="");return a}
function t(a,b,c,d,k){var e="";-1===b.search("&ei=")&&(e="&ei="+p(d),-1===b.search("&lei=")&&(d=q(d))&&(e+="&lei="+d));d="";var g=-1===b.search("&cshid=")&&"slh"!==a,f=[];f.push(["zx",Date.now().toString()]);h._cshid&&g&&f.push(["cshid",h._cshid]);c=c();null!=c&&f.push(["opi",c.toString()]);for(c=0;c<f.length;c++){if(0===c||0<c)d+="&";d+=f[c][0]+"="+f[c][1]}return"/"+(k||"gen_204")+"?atyp=i&ct="+String(a)+"&cad="+(b+e+d)};m=google.kEI;google.getEI=p;google.getLEI=q;google.ml=function(){return null};google.log=function(a,b,c,d,k,e){e=void 0===e?l:e;c||(c=t(a,b,e,d,k));if(c=r(c)){a=new Image;var g=n.length;n[g]=a;a.onerror=a.onload=a.onabort=function(){delete n[g]};a.src=c}};google.logUrl=function(a,b){b=void 0===b?l:b;return t("",a,b)};}).call(this);(function(){google.y={};google.sy=[];google.x=function(a,b){if(a)var c=a.id;else{do c=Math.random();while(google.y[c])}google.y[c]=[a,b];return!1};google.sx=function(a){google.sy.push(a)};google.lm=[];google.plm=function(a){google.lm.push.apply(google.lm,a)};google.lq=[];google.load=function(a,b,c){google.lq.push([[a],b,c])};google.loadAll=function(a,b){google.lq.push([a,b])};google.bx=!1;google.lx=function(){};}).call(this);google.f={};(function(){
document.documentElement.addEventListener("submit",function(b){var a;if(a=b.target){var c=a.getAttribute("data-submitfalse");a="1"===c||"q"===c&&!a.elements.q.value?!0:!1}else a=!1;a&&(b.preventDefault(),b.stopPropagation())},!0);document.documentElement.addEventListener("click",function(b){var a;a:{for(a=b.target;a&&a!==document.documentElement;a=a.parentElement)if("A"===a.tagName){a="1"===a.getAttribute("data-nohref");break a}a=!1}a&&b.preventDefault()},!0);}).call(this);</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}
</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#1967d2}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}body{background:#fff;color:#000}a{color:#681da8;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#1967d2}a:visited{color:#681da8}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#f8f9fa;border:solid 1px;border-color:#dadce0 #70757a #70757a #dadce0;height:30px}.lsbb{display:block}#WqQANb a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;color:#000;border:none;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#dadce0}.lst:focus{outline:none}</style><script nonce="R7r_B3hvxMHVXB1veGv-Hw">(function(){window.google.erd={jsr:1,bv:1838,de:true};
var l=this||self;var m,n=null!=(m=l.mei)?m:1,p,q=null!=(p=l.sdo)?p:!0,r=0,t,u=google.erd,v=u.jsr;google.ml=function(a,b,d,h,e){e=void 0===e?2:e;b&&(t=a&&a.message);if(google.dl)return google.dl(a,e,d),null;if(0>v){window.console&&console.error(a,d);if(-2===v)throw a;b=!1}else b=!a||!a.message||"Error loading script"===a.message||r>=n&&!h?!1:!0;if(!b)return null;r++;d=d||{};b=encodeURIComponent;var c="/gen_204?atyp=i&ei="+b(google.kEI);google.kEXPI&&(c+="&jexpid="+b(google.kEXPI));c+="&srcpg="+b(google.sn)+"&jsr="+b(u.jsr)+"&bver="+b(u.bv);var f=a.lineNumber;void 0!==f&&(c+="&line="+f);var g=
a.fileName;g&&(0<g.indexOf("-extension:/")&&(e=3),c+="&script="+b(g),f&&g===window.location.href&&(f=document.documentElement.outerHTML.split("\n")[f],c+="&cad="+b(f?f.substring(0,300):"No script found.")));c+="&cad=ple_"+google.ple+".aple_"+google.aple;google.ple&&1===google.ple&&(e=2);c+="&jsel="+e;for(var k in d)c+="&",c+=b(k),c+="=",c+=b(d[k]);c=c+"&emsg="+b(a.name+": "+a.message);c=c+"&jsst="+b(a.stack||"N/A");12288<=c.length&&(c=c.substr(0,12288));a=c;h||google.log(0,"",a);return a};window.onerror=function(a,b,d,h,e){if(t!==a){a=e instanceof Error?e:Error(a);void 0===d||"lineNumber"in a||(a.lineNumber=d);void 0===b||"fileName"in a||(a.fileName=b);b=void 0;if(a.stack&&(-1!==a.stack.indexOf("?xjs=s0")||-1!==a.stack.indexOf("&xjs=s0"))){b=document.querySelectorAll("script[src*=\\/xjs\\/_\\/js\\/]");for(h=d=0;h<b.length;h++)d+=b[h].async?1:0;var c=e=h=-1,f=-1,g=-1;if(performance&&google.xjsu){h=0;e=google.timers.load.t.xjsee?1:0;f=c=0;g=performance.getEntriesByType("resource");for(var k=
0;k<g.length;k++)-1!==g[k].name.indexOf(google.xjsu)&&(h=1),-1!==g[k].name.indexOf("/xjs/_/js/")&&(c+=1,f+="script"===g[k].initiatorType?1:0);g=c-f}b={cad:"pl_"+h+".pe_"+e+".asc_"+d+".tsc_"+b.length+".fasc_"+(b.length-d)+".lxc_"+c+".lsx_"+f+".lnsx_"+g}}google.ml(a,!1,b,!1,"SyntaxError"===a.name||"SyntaxError"===a.message.substring(0,11)||-1!==a.message.indexOf("Script error")?3:0)}t=null;q&&r>=n&&(window.onerror=null)};})();</script></head><body bgcolor="#fff"><script nonce="R7r_B3hvxMHVXB1veGv-Hw">(function(){var src='/images/nav_logo229.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}
if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}
}
})();</script><div id="mngb"><div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="https://www.google.com/imghp?hl=en&tab=wi">Images</a> <a class=gb1 href="https://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="https://play.google.com/?hl=en&tab=w8">Play</a> <a class=gb1 href="https://www.youtube.com/?tab=w1">YouTube</a> <a class=gb1 href="https://news.google.com/?tab=wn">News</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 href="https://drive.google.com/?tab=wo">Drive</a> <a class=gb1 style="text-decoration:none" href="https://www.google.com/intl/en/about/products?tab=wh"><u>More</u> &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href="http://www.google.com/history/optout?hl=en" class=gb4>Web History</a> | <a  href="/preferences?hl=en" class=gb4>Settings</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/&ec=GAZAAQ" class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div></div><center><br clear="all" id="lgpd"><div id="lga"><img alt="Google" height="92" src="/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png" style="padding:28px 0 14px" width="272" id="hplogo"><br><br></div><form action="/search" name="f"><table cellpadding="0" cellspacing="0"><tr valign="top"><td width="25%">&nbsp;</td><td align="center" nowrap=""><input name="ie" value="ISO-8859-1" type="hidden"><input value="en" name="hl" type="hidden"><input name="source" type="hidden" value="hp"><input name="biw" type="hidden"><input name="bih" type="hidden"><div class="ds" style="height:32px;margin:4px 0"><input class="lst" style="margin:0;padding:5px 8px 0 6px;vertical-align:top;color:#000" autocomplete="off" value="" title="Google Search" maxlength="2048" name="q" size="57"></div><br style="line-height:0"><span class="ds"><span class="lsbb"><input class="lsb" value="Google Search" name="btnG" type="submit"></span></span><span class="ds"><span class="lsbb"><input class="lsb" id="tsuid_1" value="I'm Feeling Lucky" name="btnI" type="submit"><script nonce="R7r_B3hvxMHVXB1veGv-Hw">(function(){var id='tsuid_1';document.getElementById(id).onclick = function(){if (this.form.q.value){this.checked = 1;if (this.form.iflsig)this.form.iflsig.disabled = false;}
else top.location='/doodles/';};})();</script><input value="AD69kcEAAAAAZMbGun3a2zi9ggKeKkNwb9PPi1O8jBF5" name="iflsig" type="hidden"></span></span></td><td class="fl sblc" align="left" nowrap="" width="25%"><a href="/advanced_search?hl=en&amp;authuser=0">Advanced search</a></td></tr></table><input id="gbv" name="gbv" type="hidden" value="1"><script nonce="R7r_B3hvxMHVXB1veGv-Hw">(function(){var a,b="1";if(document&&document.getElementById)if("undefined"!=typeof XMLHttpRequest)b="2";else if("undefined"!=typeof ActiveXObject){var c,d,e=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(c=0;d=e[c++];)try{new ActiveXObject(d),b="2"}catch(h){}}a=b;if("2"==a&&-1==location.search.indexOf("&gbv=2")){var f=google.gbvu,g=document.getElementById("gbv");g&&(g.value=a);f&&window.setTimeout(function(){location.href=f},0)};}).call(this);</script></form><div id="gac_scont"></div><div style="font-size:83%;min-height:3.5em"><br></div><span id="footer"><div style="font-size:10pt"><div style="margin:19px auto;text-align:center" id="WqQANb"><a href="/intl/en/ads/">Advertising</a><a href="/services/">Business Solutions</a><a href="/intl/en/about.html">About Google</a></div></div><p style="font-size:8pt;color:#70757a">&copy; 2023 - <a href="/intl/en/policies/privacy/">Privacy</a> - <a href="/intl/en/policies/terms/">Terms</a></p></span></center><script nonce="R7r_B3hvxMHVXB1veGv-Hw">(function(){window.google.cdo={height:757,width:1440};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b){var c=window.document,d="CSS1Compat"==c.compatMode?c.documentElement:c.body;a=d.clientWidth;b=d.clientHeight}
if(a&&b&&(a!=google.cdo.width||b!=google.cdo.height)){var e=google,f=e.log,g="/client_204?&atyp=i&biw="+a+"&bih="+b+"&ei="+google.kEI,h="",k=[],l=void 0!==window.google&&void 0!==window.google.kOPI&&0!==window.google.kOPI?window.google.kOPI:null;null!=l&&k.push(["opi",l.toString()]);for(var m=0;m<k.length;m++){if(0===m||0<m)h+="&";h+=k[m][0]+"="+k[m][1]}f.call(e,"","",g+h)};}).call(this);})();</script> <script nonce="R7r_B3hvxMHVXB1veGv-Hw">(function(){google.xjs={ck:'xjs.hp.VoMROstAmI0.L.X.O',cs:'ACT90oHJnt0K__bKai84henb1UUrfsXGBw',csss:'ACT90oGsIMz43NUaCikBDwWLGkHJTPIwvw',excm:[],sepcss:false};})();</script>     <script nonce="R7r_B3hvxMHVXB1veGv-Hw">(function(){var u='/xjs/_/js/k\x3dxjs.hp.en.PCvupa2KVuo.O/am\x3dAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAACAKAjAAAsAMAF/d\x3d1/ed\x3d1/rs\x3dACT90oEKh30Iertgq-CfJQfcAtkFNA_kig/m\x3dsb_he,d,cEt90b,SNUn3,qddgKe,sTsDMc,dtl0hd,eHDfl';var amd=0;
var d=this||self,e=function(b){return b};var f;var h=function(b){this.g=b};h.prototype.toString=function(){return this.g+""};var l={};var n=function(){var b=document;var a="SCRIPT";"application/xhtml+xml"===b.contentType&&(a=a.toLowerCase());return b.createElement(a)};
function p(){var b=u,a=function(){};google.lx=google.stvsc?a:function(){q(b);google.lx=a};google.bx||google.lx()}
function r(b,a){a=null===a?"null":void 0===a?"undefined":a;if(void 0===f){var c=null;var k=d.trustedTypes;if(k&&k.createPolicy){try{c=k.createPolicy("goog#html",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){d.console&&d.console.error(t.message)}f=c}else f=c}a=(c=f)?c.createScriptURL(a):a;a=new h(a,l);b.src=a instanceof h&&a.constructor===h?a.g:"type_error:TrustedResourceUrl";var g,m;(g=(a=null==(m=(g=(b.ownerDocument&&b.ownerDocument.defaultView||window).document).querySelector)?void 0:m.call(g,"script[nonce]"))?a.nonce||a.getAttribute("nonce")||"":"")&&b.setAttribute("nonce",g);google.as?google.as(b):document.body.appendChild(b)}function q(b){google.timers&&google.timers.load&&google.tick&&google.tick("load","xjsls");var a=n();a.onerror=function(){google.ple=1};a.onload=function(){google.ple=0};r(a,b);google.aple=-1;google.psa=!0};google.xjsu=u;d._F_jsUrl=u;setTimeout(function(){0<amd?google.caft(function(){return p()},amd):p()},0);})();window._ = window._ || {};window._DumpException = _._DumpException = function(e){throw e;};window._s = window._s || {};_s._DumpException = _._DumpException;window._qs = window._qs || {};_qs._DumpException = _._DumpException;(function(){window._F_toggles=[1,268435456,16777216,81920,256,0,973078624,184549384,376832];})();function _F_installCss(c){}
(function(){google.jl={blt:'none',chnk:0,dw:false,dwu:true,emtn:0,end:0,ico:false,ikb:0,ine:false,injs:'none',injt:0,injth:0,injv2:false,lls:'default',pdt:0,rep:0,snet:true,strt:0,ubm:false,uwp:true};})();(function(){var pmc='{\x22d\x22:{},\x22sb_he\x22:{\x22agen\x22:false,\x22cgen\x22:false,\x22client\x22:\x22heirloom-hp\x22,\x22dh\x22:true,\x22ds\x22:\x22\x22,\x22fl\x22:true,\x22host\x22:\x22google.com\x22,\x22jsonp\x22:true,\x22msgs\x22:{\x22cibl\x22:\x22Clear Search\x22,\x22dym\x22:\x22Did you mean:\x22,\x22lcky\x22:\x22I\\u0026#39;m Feeling Lucky\x22,\x22lml\x22:\x22Learn more\x22,\x22psrc\x22:\x22This search was removed from your \\u003Ca href\x3d\\\x22/history\\\x22\\u003EWeb History\\u003C/a\\u003E\x22,\x22psrl\x22:\x22Remove\x22,\x22sbit\x22:\x22Search by image\x22,\x22srch\x22:\x22Google Search\x22},\x22ovr\x22:{},\x22pq\x22:\x22\x22,\x22rfs\x22:[],\x22sbas\x22:\x220 3px 8px 0 rgba(0,0,0,0.2),0 0 0 1px rgba(0,0,0,0.08)\x22,\x22stok\x22:\x22qiE9t61knqJPM7aTd_AAMKNWBf4\x22}}';google.pmc=JSON.parse(pmc);})();(function(){
var b=function(a){var c=0;return function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}}},e=this||self;var g,h;a:{for(var k=["CLOSURE_FLAGS"],l=e,n=0;n<k.length;n++)if(l=l[k[n]],null==l){h=null;break a}h=l}var p=h&&h[610401301];g=null!=p?p:!1;var q,r=e.navigator;q=r?r.userAgentData||null:null;function t(a){return g?q?q.brands.some(function(c){return(c=c.brand)&&-1!=c.indexOf(a)}):!1:!1}function u(a){var c;a:{if(c=e.navigator)if(c=c.userAgent)break a;c=""}return-1!=c.indexOf(a)};function v(){return g?!!q&&0<q.brands.length:!1}function w(){return u("Safari")&&!(x()||(v()?0:u("Coast"))||(v()?0:u("Opera"))||(v()?0:u("Edge"))||(v()?t("Microsoft Edge"):u("Edg/"))||(v()?t("Opera"):u("OPR"))||u("Firefox")||u("FxiOS")||u("Silk")||u("Android"))}function x(){return v()?t("Chromium"):(u("Chrome")||u("CriOS"))&&!(v()?0:u("Edge"))||u("Silk")}function y(){return u("Android")&&!(x()||u("Firefox")||u("FxiOS")||(v()?0:u("Opera"))||u("Silk"))};var z=v()?!1:u("Trident")||u("MSIE");y();x();w();var A=!z&&!w(),D=function(a){if(/-[a-z]/.test("ved"))return null;if(A&&a.dataset){if(y()&&!("ved"in a.dataset))return null;a=a.dataset.ved;return void 0===a?null:a}return a.getAttribute("data-"+"ved".replace(/([A-Z])/g,"-$1").toLowerCase())};var E=[],F=null;function G(a){a=a.target;var c=performance.now(),f=[],H=f.concat,d=E;if(!(d instanceof Array)){var m="undefined"!=typeof Symbol&&Symbol.iterator&&d[Symbol.iterator];if(m)d=m.call(d);else if("number"==typeof d.length)d={next:b(d)};else throw Error("a`"+String(d));for(var B=[];!(m=d.next()).done;)B.push(m.value);d=B}E=H.call(f,d,[c]);if(a&&a instanceof HTMLElement)if(a===F){if(c=4<=E.length)c=5>(E[E.length-1]-E[E.length-4])/1E3;if(c){c=google.getEI(a);a.hasAttribute("data-ved")?f=a?D(a)||"":"":f=(f=
a.closest("[data-ved]"))?D(f)||"":"";f=f||"";if(a.hasAttribute("jsname"))a=a.getAttribute("jsname");else{var C;a=null==(C=a.closest("[jsname]"))?void 0:C.getAttribute("jsname")}google.log("rcm","&ei="+c+"&ved="+f+"&jsname="+(a||""))}}else F=a,E=[c]}window.document.addEventListener("DOMContentLoaded",function(){document.body.addEventListener("click",G)});}).call(this);</script></body></html>

262192
<!DOCTYPE html><html data-app-version="2.6.570" lang="en"><head><meta charSet="utf-8"/><link rel="preconnect" href="https://res.cloudinary.com"/><link rel="preconnect" href="https://stats.g.doubleclick.net"/><link rel="preconnect" href="https://www.google.com"/><link rel="preconnect" href="https://www.google-analytics.com"/><link rel="preconnect" href="https://www.googletagmanager.com"/><link rel="preload" as="style" href="/_next/static/css/04156aa149b83e74.css"/><link rel="preload" as="style" href="/_next/static/css/ba4549b67c5f2e8a.css"/><link rel="preload" as="script" href="/_next/static/chunks/webpack-6d9cb6d60f2d9e7b.js"/><link rel="preload" as="script" href="/_next/static/chunks/main-3d611127175e5c83.js"/><link rel="preload" as="script" href="/_next/static/chunks/framework-28b19a993185cf71.js"/><link rel="preload" as="script" href="/_next/static/chunks/pages/_app-c8e0d75706c052d7.js"/><link rel="preload" as="script" href="/_next/static/chunks/2183-8f627820024a2001.js"/><link rel="preload" as="script" href="/_next/static/chunks/6546-e18722f1b7b2d5f6.js"/><link rel="preload" as="script" href="/_next/static/chunks/9490-6474a9ee115a819a.js"/><link rel="preload" as="script" href="/_next/static/chunks/6560-12ebe5e866750fd0.js"/><link rel="preload" as="script" href="/_next/static/chunks/5557-8783331a5eb7a8c4.js"/><link rel="preload" as="script" href="/_next/static/chunks/2820-12c4b856e1c44b34.js"/><link rel="preload" as="script" href="/_next/static/chunks/pages/index-1099d22821305ba5.js"/><link rel="preload" as="script" href="/_next/static/tjRfPRPy4aH1G4B1hKB1F/_buildManifest.js"/><link rel="preload" as="script" href="/_next/static/tjRfPRPy4aH1G4B1hKB1F/_ssgManifest.js"/><link rel="preload" href="/_next/static/css/04156aa149b83e74.css" as="style"/><link rel="preload" href="/_next/static/css/ba4549b67c5f2e8a.css" as="style"/><meta name="facebook-domain-verification" content="kjydpihjo04qwyfre6ptrzy97bdqqs"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@todoist"/><meta name="twitter:creator" content="@todoist"/><meta property="og:type" content="website"/><meta property="og:locale" content="en"/><meta property="og:site_name" content="Todoist"/><title>Todoist | A To-Do List to Organize Your Work &amp; Life</title><meta name="robots" content="index,follow"/><meta name="description" content="Trusted by 30 million people and teams. Todoist is the world&#x27;s favorite task manager and to-do list app. Finally become focused, organized and calm."/><link rel="alternate" hrefLang="en" href="https://todoist.com"/><link rel="alternate" hrefLang="ru" href="https://todoist.com/ru"/><link rel="alternate" hrefLang="fr" href="https://todoist.com/fr"/><link rel="alternate" hrefLang="nl" href="https://todoist.com/nl"/><link rel="alternate" hrefLang="pt-BR" href="https://todoist.com/pt-BR"/><link rel="alternate" hrefLang="zh-CN" href="https://todoist.com/zh-CN"/><link rel="alternate" hrefLang="ko" href="https://todoist.com/ko"/><link rel="alternate" hrefLang="nb" href="https://todoist.com/nb"/><link rel="alternate" hrefLang="de" href="https://todoist.com/de"/><link rel="alternate" hrefLang="sv" href="https://todoist.com/sv"/><link rel="alternate" hrefLang="tr" href="https://todoist.com/tr"/><link rel="alternate" hrefLang="it" href="https://todoist.com/it"/><link rel="alternate" hrefLang="da" href="https://todoist.com/da"/><link rel="alternate" hrefLang="pl" href="https://todoist.com/pl"/><link rel="alternate" hrefLang="fi" href="https://todoist.com/fi"/><link rel="alternate" hrefLang="zh-TW" href="https://todoist.com/zh-TW"/><link rel="alternate" hrefLang="ja" href="https://todoist.com/ja"/><link rel="alternate" hrefLang="es" href="https://todoist.com/es"/><link rel="alternate" hrefLang="cs" href="https://todoist.com/cs"/><meta property="og:title" content="Todoist | A To-Do List to Organize Your Work &amp; Life"/><meta property="og:description" content="Trusted by 30 million people and teams. Todoist is the world&#x27;s favorite task manager and to-do list app. Finally become focused, organized and calm."/><meta property="og:url" content="https://todoist.com"/><meta property="og:image" content="https://todoist.com/static/ogimages/en/og-image-home.png"/><meta property="og:image:alt" content="Organize work &amp; life"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="628"/><link rel="canonical" href="https://todoist.com"/><meta name="next-head-count" content="48"/><link rel="icon" type="image/x-icon" href="/static/favicon.ico"/><link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png"/><link rel="mask-icon" color="#e44332" href="/static/safari-pinned-tab.svg"/><link rel="manifest" href="/static/site.webmanifest"/><style type="text/css">html body { background-color: var(--composition-background-primary); }
</style><link rel="preload" as="image" imageSrcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 2624w" imageSizes="(max-width: 1200px) 100vw, 1200px" fetchPriority="high"/><link rel="preload" as="image" imageSrcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 2624w" imageSizes="(max-width: 300px) 100vw, 300px" fetchPriority="high"/><link rel="preload" as="image" imageSrcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 2624w" imageSizes="(max-width: 382px) 100vw, 382px" fetchPriority="high"/><link rel="preload" as="image" imageSrcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2624w" imageSizes="(max-width: 300px) 100vw, 300px" fetchPriority="high"/><link rel="preload" as="image" imageSrcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2624w" imageSizes="(max-width: 300px) 100vw, 300px" fetchPriority="high"/><link rel="preload" as="image" imageSrcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2624w" imageSizes="(max-width: 300px) 100vw, 300px" fetchPriority="high"/><link rel="preload" as="image" imageSrcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2624w" imageSizes="(max-width: 300px) 100vw, 300px" fetchPriority="high"/><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl+'&gtm_auth=1nvG3iE405yFhG8LM5F0nQ&gtm_preview=env-2&gtm_cookies_win=x';f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-MF4CZSB');</script><link rel="stylesheet" href="/_next/static/css/04156aa149b83e74.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/css/ba4549b67c5f2e8a.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-6d9cb6d60f2d9e7b.js" defer=""></script><script src="/_next/static/chunks/main-3d611127175e5c83.js" defer=""></script><script src="/_next/static/chunks/framework-28b19a993185cf71.js" defer=""></script><script src="/_next/static/chunks/pages/_app-c8e0d75706c052d7.js" defer=""></script><script src="/_next/static/chunks/2183-8f627820024a2001.js" defer=""></script><script src="/_next/static/chunks/6546-e18722f1b7b2d5f6.js" defer=""></script><script src="/_next/static/chunks/9490-6474a9ee115a819a.js" defer=""></script><script src="/_next/static/chunks/6560-12ebe5e866750fd0.js" defer=""></script><script src="/_next/static/chunks/5557-8783331a5eb7a8c4.js" defer=""></script><script src="/_next/static/chunks/2820-12c4b856e1c44b34.js" defer=""></script><script src="/_next/static/chunks/pages/index-1099d22821305ba5.js" defer=""></script><script src="/_next/static/tjRfPRPy4aH1G4B1hKB1F/_buildManifest.js" defer=""></script><script src="/_next/static/tjRfPRPy4aH1G4B1hKB1F/_ssgManifest.js" defer=""></script></head><body class="todoistTheme"><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MF4CZSB&gtm_auth=1nvG3iE405yFhG8LM5F0nQ&gtm_preview=env-2&gtm_cookies_win=x" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div id="__next"><div class="app_appContainer__ry8xc"><div class="eFIWyCm6fiCLErdXino2"><div class="TM_8G24saTdTZjydiHsw"><nav class="K9o8dlbROHYPd6t_tjkq YttEe7kIjjIAtcbhghld BNiOPRzcZXhZrycvcnLa"><div class="ALjV_FDtdiJ2rGCAH1Lg"><div class="kzeioPKvGqaMOvAGcer5"><a href="/home" aria-label="Home"><div class=""><div class="JDguX5oZL3ITNTthPuWx"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 32" fill="none" preserveAspectRatio="xMinYMid slice" height="32"><rect width="32" height="32" fill="#DE483A" rx="5.12"></rect><path fill="#ffffff" d="m6.764 14.993 6.374-3.668.008-.005 6.568-3.78c.277-.16.29-.65-.02-.828l-.217-.124c-.317-.18-.727-.414-.902-.516a1.02 1.02 0 0 0-.997.012c-.155.09-10.501 6.038-10.847 6.235a1.349 1.349 0 0 1-1.339 0L-.072 9.144v2.699l.056.032c1.364.795 4.592 2.675 5.382 3.12.479.27.937.264 1.398-.002Z"></path><path fill="#ffffff" d="m6.764 20.385 6.366-3.664.024-.014 6.56-3.775c.277-.16.29-.651-.02-.828l-.217-.124c-.316-.18-.727-.414-.902-.516a1.02 1.02 0 0 0-.997.012c-.155.089-10.501 6.038-10.847 6.234a1.349 1.349 0 0 1-1.339 0c-.326-.188-5.464-3.174-5.464-3.174v2.698l.056.033c1.365.795 4.592 2.674 5.382 3.12.479.27.937.264 1.398-.002Z"></path><path fill="#ffffff" d="m13.139 22.108-6.375 3.669c-.461.266-.92.272-1.398.002-.79-.446-4.017-2.325-5.382-3.12l-.056-.033v-2.698l5.464 3.174c.413.239.925.236 1.339 0 .346-.196 10.692-6.145 10.847-6.235a1.02 1.02 0 0 1 .997-.012 125.007 125.007 0 0 0 1.12.64c.31.178.296.669.019.829l-6.575 3.784Z"></path><g><path fill="#DE483A" d="M55.65 18.73c0 .515.089 1.015.264 1.492.176.481.432.904.774 1.273.342.37.751.664 1.23.884.48.221 1.025.331 1.632.331.608 0 1.152-.11 1.631-.33a3.768 3.768 0 0 0 2.005-2.158c.173-.477.26-.977.26-1.492s-.087-1.015-.26-1.494a3.779 3.779 0 0 0-.774-1.271 3.863 3.863 0 0 0-1.23-.885 3.865 3.865 0 0 0-1.632-.333c-.607 0-1.152.113-1.631.333-.48.221-.889.516-1.23.885a3.74 3.74 0 0 0-.775 1.27c-.175.48-.263.98-.263 1.495Zm-3.316 0c0-1.05.19-2.005.567-2.862a6.665 6.665 0 0 1 1.535-2.198 6.78 6.78 0 0 1 2.293-1.411 8 8 0 0 1 2.821-.497c.995 0 1.935.166 2.82.497a6.81 6.81 0 0 1 2.294 1.41 6.689 6.689 0 0 1 1.535 2.199c.378.857.567 1.811.567 2.862 0 1.05-.19 2.005-.567 2.862a6.688 6.688 0 0 1-1.535 2.198A6.766 6.766 0 0 1 62.37 25.2a7.934 7.934 0 0 1-2.819.497 7.946 7.946 0 0 1-2.821-.497 6.735 6.735 0 0 1-2.293-1.409 6.664 6.664 0 0 1-1.535-2.198c-.378-.857-.567-1.811-.567-2.862ZM71.63 18.734c0 .515.087 1.015.263 1.492.175.481.431.904.773 1.273.342.37.752.664 1.231.884.48.22 1.024.331 1.631.331.608 0 1.152-.11 1.632-.33a3.762 3.762 0 0 0 2.005-2.158 4.35 4.35 0 0 0 .26-1.492c0-.515-.087-1.015-.26-1.494a3.772 3.772 0 0 0-2.005-2.156 3.864 3.864 0 0 0-1.632-.333c-.607 0-1.152.113-1.63.333a3.86 3.86 0 0 0-1.232.885c-.341.369-.598.792-.773 1.27-.176.48-.264.98-.264 1.495Zm7.852 4.644h-.057c-.479.812-1.122 1.402-1.934 1.77a6.292 6.292 0 0 1-2.626.552c-1.033 0-1.949-.178-2.752-.538a6.162 6.162 0 0 1-2.059-1.48 6.311 6.311 0 0 1-1.3-2.212 8.26 8.26 0 0 1-.441-2.736 7.8 7.8 0 0 1 .47-2.738 6.813 6.813 0 0 1 1.312-2.212 6.076 6.076 0 0 1 2.031-1.478c.794-.36 1.66-.54 2.6-.54.627 0 1.18.065 1.66.193.479.13.902.295 1.27.5a4.807 4.807 0 0 1 1.575 1.325h.084V6.473c0-.331.263-.722.724-.722h1.873c.434 0 .722.364.722.722v18.173c0 .462-.391.723-.722.723h-1.705a.732.732 0 0 1-.725-.721v-1.27ZM88.157 18.73c0 .515.088 1.015.264 1.492.175.481.432.904.774 1.273a3.85 3.85 0 0 0 1.23.884c.48.221 1.024.331 1.632.331.607 0 1.152-.11 1.631-.33a3.763 3.763 0 0 0 2.005-2.158c.173-.477.26-.977.26-1.492s-.087-1.015-.26-1.494a3.774 3.774 0 0 0-2.005-2.156 3.866 3.866 0 0 0-1.631-.333c-.608 0-1.153.113-1.632.333-.479.221-.888.516-1.23.885-.342.369-.599.792-.774 1.27-.176.48-.264.98-.264 1.495Zm-3.316 0c0-1.05.189-2.005.567-2.862a6.663 6.663 0 0 1 1.534-2.198 6.78 6.78 0 0 1 2.293-1.411 8 8 0 0 1 2.822-.497c.994 0 1.935.166 2.819.497a6.81 6.81 0 0 1 2.295 1.41 6.689 6.689 0 0 1 1.534 2.199c.378.857.568 1.811.568 2.862 0 1.05-.19 2.005-.567 2.862a6.688 6.688 0 0 1-1.535 2.198 6.766 6.766 0 0 1-2.295 1.409 7.934 7.934 0 0 1-2.82.497 7.946 7.946 0 0 1-2.82-.497 6.736 6.736 0 0 1-2.294-1.409 6.662 6.662 0 0 1-1.534-2.198c-.378-.857-.567-1.811-.567-2.862ZM100.945 7.588c0-.535.198-.999.594-1.398.398-.395.9-.594 1.507-.594.608 0 1.121.19 1.535.568.414.378.623.852.623 1.424a1.85 1.85 0 0 1-.623 1.424c-.414.378-.927.567-1.535.567-.607 0-1.109-.198-1.507-.596-.396-.396-.594-.86-.594-1.395ZM114.64 15.77c-.331 0-.575-.25-.616-.359-.276-.723-1.155-.994-1.865-.994-1.119 0-1.997.519-1.997 1.41 0 .863.85 1.04 1.375 1.199.576.174 1.677.414 2.284.557a7.419 7.419 0 0 1 1.728.636c1.761.915 2.012 2.354 2.012 3.22 0 3.197-3.167 4.257-5.366 4.257-1.695 0-4.879-.257-5.578-3.488-.068-.315.21-.798.721-.798h1.832c.36 0 .603.263.674.47.235.649.983 1.14 2.245 1.14 1.353 0 2.153-.537 2.153-1.251 0-.462-.261-.872-.603-1.104-1.026-.696-3.564-.774-4.942-1.508-.528-.28-1.852-.922-1.852-3.109 0-3.015 2.741-4.286 5.149-4.286 3.551 0 4.854 2.243 5.001 3.075.081.459-.176.934-.692.934h-1.663ZM117.833 14.129v-1.373c0-.327.258-.721.717-.721h1.769v-3.37c0-.36.244-.58.429-.66l1.89-.825c.552-.227.999.228.999.666v4.189h2.928c.453 0 .722.395.722.721v1.375a.745.745 0 0 1-.721.723h-2.929v5.808c0 .663-.018 1.182.235 1.565.233.351.574.482 1.257.482.196 0 .371-.033.519-.083a.706.706 0 0 1 .868.317c.216.418.463.877.636 1.206.191.361.037.825-.311.993-.561.273-1.339.494-2.406.494-.884 0-1.385-.096-1.945-.29a3.347 3.347 0 0 1-1.417-1c-.324-.396-.484-.926-.604-1.516-.122-.59-.15-1.304-.15-2.08v-5.896h-1.765c-.463 0-.721-.4-.721-.725ZM41.928 14.129v-1.373c0-.327.259-.721.717-.721h2.021v-3.37c0-.36.245-.58.43-.66l1.89-.825c.552-.227.999.228.999.666v4.189h2.928c.452 0 .722.395.722.721v1.375a.745.745 0 0 1-.722.723h-2.928v5.808c0 .663-.018 1.182.235 1.565.232.351.573.482 1.257.482.196 0 .37-.033.519-.083a.706.706 0 0 1 .867.317c.217.418.464.877.637 1.206.19.361.037.825-.311.993-.562.273-1.34.494-2.406.494-.884 0-1.385-.096-1.945-.29a3.351 3.351 0 0 1-1.418-1c-.324-.396-.484-.926-.603-1.516-.122-.59-.15-1.304-.15-2.08v-5.896H42.65c-.463 0-.722-.4-.722-.725ZM102.115 25.37h1.876a.723.723 0 0 0 .721-.723v-11.89a.723.723 0 0 0-.721-.722h-1.876a.724.724 0 0 0-.721.722v11.89c0 .398.325.722.721.722Z"></path></g></svg></div><div class="nXWXUhDvwGosQscGvXZK"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none" preserveAspectRatio="xMinYMid slice" height="32"><rect width="32" height="32" fill="#DE483A" rx="5.12"></rect><path fill="#ffffff" d="m6.764 14.993 6.374-3.668.008-.005 6.568-3.78c.277-.16.29-.65-.02-.828l-.217-.124c-.317-.18-.727-.414-.902-.516a1.02 1.02 0 0 0-.997.012c-.155.09-10.501 6.038-10.847 6.235a1.349 1.349 0 0 1-1.339 0L-.072 9.144v2.699l.056.032c1.364.795 4.592 2.675 5.382 3.12.479.27.937.264 1.398-.002Z"></path><path fill="#ffffff" d="m6.764 20.385 6.366-3.664.024-.014 6.56-3.775c.277-.16.29-.651-.02-.828l-.217-.124c-.316-.18-.727-.414-.902-.516a1.02 1.02 0 0 0-.997.012c-.155.089-10.501 6.038-10.847 6.234a1.349 1.349 0 0 1-1.339 0c-.326-.188-5.464-3.174-5.464-3.174v2.698l.056.033c1.365.795 4.592 2.674 5.382 3.12.479.27.937.264 1.398-.002Z"></path><path fill="#ffffff" d="m13.139 22.108-6.375 3.669c-.461.266-.92.272-1.398.002-.79-.446-4.017-2.325-5.382-3.12l-.056-.033v-2.698l5.464 3.174c.413.239.925.236 1.339 0 .346-.196 10.692-6.145 10.847-6.235a1.02 1.02 0 0 1 .997-.012 125.007 125.007 0 0 0 1.12.64c.31.178.296.669.019.829l-6.575 3.784Z"></path></svg></div></div></a></div></div><div class="ALjV_FDtdiJ2rGCAH1Lg MJs4L8DXIaooiolDMk5u"><div class="kzeioPKvGqaMOvAGcer5 aTydDnOz8V7GM3K1hHKm"><ul class="hGJuHEzyrDQU5nwls2PW" style="--navbar-item-group-gap:2px"><li class="nOFNc0QpGW0HpMqVOfJb"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" href="/features">Features</a></li><li class="nOFNc0QpGW0HpMqVOfJb"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" href="/templates">Templates</a></li><li class="nOFNc0QpGW0HpMqVOfJb"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" href="/business">For Teams</a></li><li class="nOFNc0QpGW0HpMqVOfJb"><button class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR">Resources<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="KUavYw3DTPbmG8UQ_MTu"><path fill-rule="evenodd" d="M3.47 6.47a.75.75 0 0 1 1.06 0L8 9.94l3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06z" clip-rule="evenodd"></path></svg></button><ul class="cu311o1N1DEy2t600hnn pc32qCAyxR0Y4BHbU7Tm" id=":R26alm:"><li class="nOFNc0QpGW0HpMqVOfJb aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" aria-label="Integrations" href="/integrations"><div class="Header_dropdown__Phs2Y"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Integrations</p><p class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ Header_description__0rqTw">Connect Todoist with tools like IFTTT, Alexa, Google Calendar, and more...</p></div></a></li><li class="nOFNc0QpGW0HpMqVOfJb aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" aria-label="Getting Started Guide" href="/getting-started"><div class="Header_dropdown__Phs2Y"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Getting Started Guide</p><p class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ Header_description__0rqTw">Everything you need to know to get your Todoist up and running in minutes.</p></div></a></li><li class="nOFNc0QpGW0HpMqVOfJb aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" aria-label="Help Center" href="/help"><div class="Header_dropdown__Phs2Y"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Help Center</p><p class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ Header_description__0rqTw">Find answers to your questions and tips for getting the most out of your Todoist.</p></div></a></li><li class="nOFNc0QpGW0HpMqVOfJb aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" aria-label="Productivity Methods + Quiz" href="/productivity-methods"><div class="Header_dropdown__Phs2Y"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Productivity Methods + Quiz</p><p class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ Header_description__0rqTw">Learn the most popular productivity methods and discover which one fits you best.</p></div></a></li><li class="nOFNc0QpGW0HpMqVOfJb aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" aria-label="Inspiration Hub" href="/inspiration"><div class="Header_dropdown__Phs2Y"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Inspiration Hub</p><p class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ Header_description__0rqTw">Productivity advice you won‘t find anywhere else, plus Todoist tips and product news.</p></div></a></li></ul></li><li class="nOFNc0QpGW0HpMqVOfJb"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" href="/pricing">Pricing</a></li></ul><div class="lKbkMAAbpfoobELp5Owc nmOK3Zge7f9va_eq5Y7X lyeiL0ZsQ_9GfoM0jZIe" aria-hidden="true" style="--divider-spacing-start:var(--space-8);--divider-spacing-end:var(--space-8)"></div><ul class="hGJuHEzyrDQU5nwls2PW" style="--navbar-item-group-gap:var(--space-8)"><li class="nOFNc0QpGW0HpMqVOfJb"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR" href="/auth/login">Log in</a></li><li class="nOFNc0QpGW0HpMqVOfJb"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA" href="/auth/signup">Start for free</a></li></ul></div></div><div class="ALjV_FDtdiJ2rGCAH1Lg Frz0pvOJ0fp95qyyJfFZ"><div class="kzeioPKvGqaMOvAGcer5 aTydDnOz8V7GM3K1hHKm"><ul class="hGJuHEzyrDQU5nwls2PW" style="--navbar-item-group-gap:0px"><button class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR mM3grCr5NP0yUQ2zKXcN" aria-label="Open menu"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="fcno40qhmCgDkMq5y3Tk"><path fill-rule="evenodd" d="M0 2a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 2zm0 6a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 8zm0 6a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 14z" clip-rule="evenodd"></path></svg></button></ul></div></div></nav><div class="ALjV_FDtdiJ2rGCAH1Lg Frz0pvOJ0fp95qyyJfFZ"><div class="eiilutWvkoeGovmbOyBG"><div class="zLN4MjAlr_MJSGYV83zK YttEe7kIjjIAtcbhghld BNiOPRzcZXhZrycvcnLa"><ul class="hGJuHEzyrDQU5nwls2PW A2h4TIoqnN5dUU05n5IQ" style="--navbar-item-group-gap:var(--space-12)"><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/features">Features</a></li><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/templates">Templates</a></li><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/business">For Teams</a></li><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4"><button class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" aria-expanded="false" aria-controls=":Rhilm:">Resources<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="KUavYw3DTPbmG8UQ_MTu"><path fill-rule="evenodd" d="M3.47 6.47a.75.75 0 0 1 1.06 0L8 9.94l3.47-3.47a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 0 1 0-1.06z" clip-rule="evenodd"></path></svg></button><div class="eiilutWvkoeGovmbOyBG"><ul class="cu311o1N1DEy2t600hnn LpuBSdUHNU9jtEbheaGI pc32qCAyxR0Y4BHbU7Tm" id=":Rhilm:"><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4 aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/integrations">Integrations</a></li><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4 aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/getting-started">Getting Started Guide</a></li><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4 aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/help">Help Center</a></li><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4 aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/productivity-methods">Productivity Methods + Quiz</a></li><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4 aTZUeuKDvs6QjCbSvcSd"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/inspiration">Inspiration Hub</a></li></ul></div></li><li class="nOFNc0QpGW0HpMqVOfJb qOAlcueACI_2xpP_B0d4"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ" href="/pricing">Pricing</a></li></ul><div class="lKbkMAAbpfoobELp5Owc rb96v3SgFf7CAdIwrQ95 lyeiL0ZsQ_9GfoM0jZIe ImzyPQPbmsYQCO4nUCJN" aria-hidden="true" style="--divider-spacing-start:var(--space-16);--divider-spacing-end:var(--space-16)"></div><div style="display:flex;gap:var(--space-12)"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV pJ5lpFCDv2hmsZmokGiV o9DYmt4xfLaImiVzI9dQ" href="/auth/login" style="flex:1">Log in</a><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA o9DYmt4xfLaImiVzI9dQ" href="/auth/signup" style="flex:1">Start for free</a></div></div></div></div></div></div><div class="qQ5ru3t_6f4tH2ad0USb"></div><main><div class="intro-section_headersContainer__WEvLY YttEe7kIjjIAtcbhghld c8EWRT5sy9CxCZyUQe6w"><h1 class="Z2j5FoeQ_umI7vX0SmxF f8hhoqjLEteSfgx6bdr2 mWJbs2TuAw9nS7uYCe19">Organize your work and life, finally.</h1><p class="Z2j5FoeQ_umI7vX0SmxF VB6LgUAmqv1DrUQhn1Tq intro-section_subheading__Gr819">Become focused, organized, and calm with Todoist. The world’s #1 task manager and to-do list app.</p><div class="ALjV_FDtdiJ2rGCAH1Lg SVhGiSzS0M7007sJ4mKJ"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA o9DYmt4xfLaImiVzI9dQ ga-get-started-button" href="/auth/signup">Start for free</a></div><div class="ALjV_FDtdiJ2rGCAH1Lg OuHDHN6jISIW7I2iDwgs"><button class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA o9DYmt4xfLaImiVzI9dQ"></button></div></div><div class="intro-section_assetsWrapper__PJIND mbe-64"><div class="YttEe7kIjjIAtcbhghld BNiOPRzcZXhZrycvcnLa"><div class="intro-section_videoWrapper__Gt6hX"><video width="1500" height="690" autoplay="" muted="" playsinline="" poster="https://res.cloudinary.com/imagist/video/fetch/f_png/q_auto/so_0/https://todoist.com/static/home-teams/intro/background-video.mp4?_a=ATCqVcY0"><source type="video/mp4" src="https://res.cloudinary.com/imagist/video/fetch/f_auto/q_auto/https://todoist.com/static/home-teams/intro/background-video.mp4?_a=ATCqVcY0"/></video></div><div class="intro-section_desktopImages__l4Tog"><div class="intro-section_backgroundImage__qvRty"><img alt="" fetchPriority="high" width="1200" height="700" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 1200px) 100vw, 1200px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/desktop/background.en.jpg?_a=ATCqVcY0"/></div><div class="intro-section_foregroundImage__NLjQE"><img alt="" fetchPriority="high" width="300" height="622" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/desktop/foreground.en.png?_a=ATCqVcY0"/></div></div><div class="intro-section_mobileImage__dFp5r"><img alt="" fetchPriority="high" width="382" height="792" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 382px) 100vw, 382px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/intro/mobile/foreground.en.png?_a=ATCqVcY0"/></div></div></div><div class="customer-logos-section_customerLogosContainer__bg6LV mbe-128 xlg-mbe-192 overflow-x-hidden"><div class="YttEe7kIjjIAtcbhghld c8EWRT5sy9CxCZyUQe6w"><p class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo">30 million+ people and teams trust their sanity and productivity to Todoist</p></div><div class="T7fSsnqsFwF8kNovgGvA PcMVQoHJZAUURb05xqUG" style="--block-size:56px"><div class="nK2Kzw2ivi6sU2ZQQJDE"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 151 57" aria-label="Microsoft"><path d="m53.302 30.452-.893 2.53h-.075a17.98 17.98 0 0 0-.868-2.48L46.678 18.47H41.99v19.175h3.1V25.813c0-.744 0-1.588-.024-2.63-.025-.52-.074-.918-.1-1.215h.075a11.6 11.6 0 0 0 .447 1.637l5.755 13.99h2.183l5.705-14.114c.124-.322.248-.967.372-1.513h.075a178.288 178.288 0 0 0-.15 3.448V37.57h3.3V18.42h-4.515l-4.911 12.03Zm12.552-6.624h3.225v13.743h-3.225V23.828Zm1.637-5.804c-.546 0-.992.198-1.364.545a1.76 1.76 0 0 0-.57 1.34c0 .52.197.967.57 1.315.372.347.818.52 1.364.52.546 0 1.017-.198 1.364-.52.372-.348.57-.794.57-1.315 0-.521-.198-.967-.57-1.34-.322-.347-.794-.545-1.364-.545Zm13.023 5.68a8.998 8.998 0 0 0-1.81-.198c-1.464 0-2.804.322-3.92.967s-2.01 1.538-2.58 2.655c-.595 1.14-.893 2.455-.893 3.968 0 1.315.298 2.481.868 3.548.57 1.042 1.365 1.885 2.431 2.456 1.017.57 2.208.868 3.548.868 1.538 0 2.852-.323 3.894-.918l.025-.025v-2.977l-.124.1a5.544 5.544 0 0 1-1.563.818c-.57.199-1.091.298-1.538.298-1.29 0-2.307-.372-3.026-1.19-.744-.794-1.116-1.886-1.116-3.25 0-1.414.372-2.53 1.14-3.35.77-.818 1.787-1.24 3.027-1.24 1.042 0 2.109.348 3.076 1.042l.124.1v-3.15l-.025-.026c-.422-.173-.893-.372-1.538-.496Zm10.642-.099c-.794 0-1.538.248-2.183.77-.546.446-.918 1.09-1.24 1.86h-.025v-2.407h-3.225v13.743h3.225v-7.02c0-1.19.248-2.183.794-2.902.546-.745 1.24-1.117 2.084-1.117.297 0 .595.075.967.124.347.1.595.199.769.323l.124.099v-3.225l-.074-.025c-.224-.148-.67-.223-1.216-.223Zm8.781-.074c-2.257 0-4.068.67-5.333 1.984-1.29 1.315-1.91 3.126-1.91 5.408 0 2.133.645 3.87 1.885 5.135 1.24 1.24 2.927 1.885 5.036 1.885 2.208 0 3.969-.67 5.234-2.01 1.29-1.339 1.91-3.125 1.91-5.333 0-2.183-.595-3.919-1.811-5.184-1.166-1.265-2.877-1.885-5.01-1.885Zm2.58 10.567c-.595.77-1.538 1.141-2.704 1.141-1.166 0-2.108-.372-2.778-1.19-.67-.77-.992-1.886-.992-3.3 0-1.463.347-2.58.992-3.373.67-.794 1.588-1.191 2.754-1.191 1.141 0 2.034.372 2.679 1.141s.992 1.885.992 3.349c-.05 1.488-.323 2.654-.943 3.423Zm11.436-4.564c-1.017-.422-1.662-.744-1.96-1.017-.248-.248-.372-.596-.372-1.042 0-.372.149-.744.521-.992s.794-.373 1.414-.373c.546 0 1.116.1 1.662.249.546.148 1.042.372 1.439.67l.124.099V24.1l-.075-.025a8.95 8.95 0 0 0-1.463-.421 9.943 9.943 0 0 0-1.588-.15c-1.538 0-2.803.373-3.795 1.192-.992.768-1.464 1.81-1.464 3.026 0 .645.1 1.215.323 1.687.223.471.546.918.992 1.29.447.347 1.092.744 1.985 1.116.744.322 1.314.57 1.662.769.347.198.57.422.744.595.124.199.198.447.198.77 0 .917-.694 1.364-2.108 1.364-.546 0-1.117-.1-1.786-.323a6.898 6.898 0 0 1-1.811-.918l-.124-.099v3.15l.074.025c.472.224 1.042.372 1.737.546.694.124 1.314.223 1.86.223 1.662 0 3.026-.372 3.994-1.19.992-.794 1.513-1.811 1.513-3.126 0-.918-.248-1.736-.794-2.357a10.048 10.048 0 0 0-2.902-1.711Zm12.205-6.003c-2.258 0-4.069.67-5.334 1.984-1.265 1.315-1.91 3.126-1.91 5.408 0 2.133.645 3.87 1.885 5.135 1.241 1.24 2.928 1.885 5.036 1.885 2.208 0 3.969-.67 5.234-2.01 1.29-1.339 1.91-3.125 1.91-5.333 0-2.183-.595-3.919-1.811-5.184-1.165-1.265-2.877-1.885-5.01-1.885Zm2.555 10.567c-.596.77-1.538 1.141-2.704 1.141-1.191 0-2.109-.372-2.779-1.19-.669-.77-.992-1.886-.992-3.3 0-1.463.348-2.58.992-3.373.67-.794 1.588-1.191 2.754-1.191 1.116 0 2.034.372 2.679 1.141s.992 1.885.992 3.349c0 1.488-.322 2.654-.942 3.423Zm21.507-7.615v-2.655h-3.25V19.76l-.099.025-3.076.918-.075.025v3.1h-4.862v-1.736c0-.794.199-1.414.546-1.811.347-.397.868-.595 1.513-.595.447 0 .918.099 1.439.322l.124.075V17.28l-.074-.025c-.447-.15-1.042-.248-1.811-.248a5.81 5.81 0 0 0-2.58.595 4.298 4.298 0 0 0-1.761 1.761c-.422.744-.645 1.588-.645 2.555v1.91h-2.258v2.63h2.258V37.57h3.249V26.483h4.862v7.07c0 2.902 1.365 4.365 4.093 4.365.447 0 .918-.074 1.365-.149.471-.099.818-.223 1.017-.322l.025-.025v-2.654l-.124.1a2.103 2.103 0 0 1-.67.297 2.288 2.288 0 0 1-.645.099c-.645 0-1.092-.149-1.414-.52-.298-.348-.447-.919-.447-1.762v-6.5h3.3ZM.415 12.02H15.62v15.207H.415V12.021Zm16.794 0h15.206v15.207H17.21V12.021ZM.415 28.814H15.62v15.207H.415V28.814Zm16.794 0h15.206v15.207H17.21V28.814Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 100 57" aria-label="Disney"><path d="M40.792 16.699s.368-.574.696-1.024c.573-.778 1.638-1.883 2.416-2.58.245-.204.532-.45.532-.45s-.45.041-.696.082c-.614.123-1.474.696-1.924 1.065-.737.614-1.515 1.637-1.188 2.538.082.205.164.369.164.369Zm4.053 1.105a7.625 7.625 0 0 0 3.235-.983c.982-.532 2.415-1.637 2.293-2.907a1.044 1.044 0 0 0-.656-.86c-.45-.204-.655-.163-1.228 0-.41.124-.573.205-.982.41-1.147.655-2.744 2.047-3.603 3.194-.205.245-.41.573-.574.777-.122.123-.163.246-.163.287.04.123 1.228.123 1.678.082Zm-2.907 2.129c-.122.123-.245.41-.368.655-.082.123-.205.287-.287.328-.286.204-.532.245-.86-.041a1.963 1.963 0 0 1-.654-1.433c0-.246.04-.492 0-.696-.082-.328-.41-.696-.574-.983-.204-.368-.368-1.024-.41-1.474-.081-1.31.615-2.538 1.516-3.52.9-.983 2.129-1.802 3.398-2.335 1.228-.532 3.03-.86 4.38-.409.451.164 1.065.532 1.352.9.082.083.123.164.205.205.04.041.204.041.327.082.45.082 1.065.41 1.31.614.491.45.778.86.9 1.474.247 1.229-.45 2.58-1.268 3.399-1.392 1.392-2.743 2.415-4.504 3.07-.778.287-1.965.573-2.866.492-.286-.041-.573-.082-.819-.123-.123 0-.614-.123-.696-.164l-.082-.041Zm1.556 2.743c.041 0 .123.041.205.041.614.246.86.819 1.023 1.433.369 1.474.492 4.667.574 5.937.04.941.081 1.883.123 2.824.04.778.081 1.843-.082 2.58-.041.286-.246.573-.492.737-.286.204-.941.204-1.31.123-.9-.205-1.187-.778-1.31-1.679-.287-2.129-.164-6.305.04-8.065.042-.574.288-2.457.574-3.235.041-.246.287-.778.655-.696Zm-27.84 3.194s-1.351.081-2.252.204c-1.188.123-3.357.491-4.627.942-.368.123-1.146.45-1.228.86-.082.41.164.737.45 1.064.164.205 1.065 1.065 1.351 1.27 1.065.9 3.276 2.292 4.873 2.947.532.246 1.473.573 1.473.573s-.081-2.62-.04-5.158c-.041-1.351 0-2.703 0-2.703Zm24.524 1.023c.082.696-.123 2.006-.123 2.21-.04.41-.368 1.311-.41 1.434-.245.573-.49 1.023-.736 1.474-.45.778-1.474 2.047-2.088 2.58-2.293 2.005-5.855 3.11-8.926 3.48-2.088.245-4.462.204-6.673-.206a31.02 31.02 0 0 1-1.884-.409s0 .45-.04.778c0 .123-.123.532-.205.655-.164.328-.41.491-.82.573-.45.082-.94.123-1.391-.082-.696-.286-.942-.941-1.065-1.72-.082-.613-.204-1.637-.204-1.637s-.533-.246-.942-.45c-1.351-.655-2.62-1.474-3.726-2.293-.327-.246-1.637-1.351-1.924-1.597-.819-.778-1.556-1.556-2.13-2.538-.45-.778-.572-1.474-.245-2.293.45-1.146 2.088-2.006 3.235-2.497.819-.369 3.398-1.188 4.462-1.351.492-.082 1.27-.205 1.351-.246l.041-.041c.041-.041.082-1.187.041-1.597 0-.41.287-3.07.41-3.644.04-.327.286-1.473.532-1.801.164-.205.41-.205.655-.04 1.228.777 1.597 3.397 1.679 4.748.04.82.082 2.047.082 2.047s1.392-.04 2.252 0c.818.041 1.76.164 2.62.287 1.105.164 3.275.655 4.544 1.27 1.024.531 1.966 1.391 2.293 2.333.287.86.246 1.433-.205 2.21-.49.86-1.433 1.516-2.374 1.556-.287 0-1.351-.122-1.679-.368a.315.315 0 0 1-.04-.41c.04-.04.531-.286.818-.45.164-.082.287-.163.369-.286.245-.205.45-.45.45-.737-.041-.369-.41-.573-.778-.737-1.72-.655-5.077-1.229-6.756-1.351-.655-.041-1.555-.082-1.555-.082l.286 9.13s.737.164 1.351.245c.328.041 1.802.164 2.17.205 2.948.082 6.183-.164 8.885-1.474 1.187-.573 2.252-1.228 3.07-2.17 1.065-1.228 1.638-2.947 1.515-4.708-.163-1.924-1.515-4.217-2.62-5.609-2.866-3.685-7.779-6.714-12.119-8.516-4.422-1.801-8.802-2.866-13.47-3.03-1.228-.04-3.848 0-5.159.369-.204.04-.368.123-.573.164-.123.04-.368.122-.41.163l-.081.082.164.082c.123.082.737.082 1.023.164.287.04.573.205.655.41.123.204.123.327 0 .49-.286.37-1.433.287-1.924.246-.532-.082-1.146-.245-1.27-.696-.122-.532.124-1.064.37-1.555.532-.983 1.35-1.474 2.497-1.802 1.637-.45 3.685-.778 5.24-.819 3.521-.123 6.797.492 10.195 1.515 1.924.573 4.504 1.556 6.346 2.457a50.267 50.267 0 0 1 4.626 2.62c.369.246 2.539 1.842 2.907 2.129.696.573 1.638 1.392 2.293 2.088 1.31 1.27 2.907 3.234 3.685 4.79.205.369.328.737.573 1.187.082.164.45 1.024.491 1.31.041.246.164.615.164.656.041.04.205.819.205 1.105Zm15.067.655h.122c1.065.164 2.13.328 2.907.696.737.328 1.188.737 1.597 1.474.614 1.146.655 2.702.082 3.89-.41.9-1.31 1.637-2.13 2.047-.859.409-1.678.614-2.66.736-1.679.205-3.521-.163-5.036-.9-.9-.45-2.006-1.188-2.539-2.17-.409-.696-.409-1.638.082-2.334.778-1.064 2.457-1.31 3.767-1.269.983.041 2.702.328 3.644.655.245.082 1.187.45 1.35.614.124.123.206.287.124.45-.205.656-1.76.983-2.211 1.065-1.228.205-1.843-.287-3.194-.819-.327-.123-.777-.286-1.146-.327-.614-.041-1.392.122-1.474.778-.04.368.369.696.655.818.737.328 1.351.45 2.047.45 2.13.042 4.545-.327 6.305-1.555.246-.164.492-.41.492-.737 0-.04-.041-.368-.164-.41h-.041c-.041 0-.123-.122-.164-.204-.123-.164-.614-.369-.737-.41-1.187-.49-3.357-.736-4.503-.818-1.188-.082-3.03-.246-3.48-.328-.45-.082-.942-.164-1.352-.327a1.608 1.608 0 0 1-.9-1.024c-.205-.819.04-1.801.491-2.415 1.187-1.68 3.93-2.334 5.977-2.58 1.966-.245 5.2-.245 7.125.778.286.164.45.328.409.614-.123.614-.573.983-1.146 1.147-.574.163-1.761.245-2.293.286-2.334.123-5.2.082-7.41.655-.165.041-.492.123-.574.246-.368.368.655.491.86.532.082 0 .082 0 .123.041l4.995.655Zm7.328 8.803c-.941-.369-1.146-1.884-1.187-2.662-.164-2.538.532-6.018 1.351-8.393.246-.655.573-1.76 1.351-1.72.532.042.9.451 1.187.86.737 1.065 1.72 2.457 2.375 3.44.737 1.105 1.433 2.21 2.088 3.234.082.123.164.246.246.328.123.082.245.122.286 0 .041-.041-.04-1.31-.04-1.556-.041-.41-.083-.737-.123-1.106-.123-1.023-.45-2.456-.696-3.439-.287-1.064-.615-2.21-.86-3.275-.082-.328-.164-.696-.164-1.024 0-.45.287-.737.778-.573.982.328 2.252 2.416 2.62 3.153.123.245.614 1.474.737 1.842.41 1.187.655 2.334.737 3.644.123 1.27 0 3.111-.532 4.38-.205.451-.614 1.065-.942 1.393-.532.491-1.596.86-2.292.45-.778-.45-2.089-2.702-2.334-3.111-.737-1.31-2.047-3.89-2.252-4.177-.041-.082-.082-.122-.205-.163-.082-.041-.123.122-.123.245-.122.737-.204 4.258-.204 4.381-.041.573-.041 2.047-.205 2.743-.123.45-.205.86-.655 1.065-.328.245-.573.163-.942.04Zm13.102-.246a1.574 1.574 0 0 1-.369-.368s-.368-.533-.41-.697c-.04-.122-.122-.245-.163-.327-.328-.819-.287-1.597-.123-2.457.164-.818.328-.818.737-1.924.041-.04.041-.123.041-.164 0-.163-.246-1.187-.246-1.473 0-.492.369-.86 1.024-.901h.164c.245-.082.41-.573.573-.942.205-.573.491-1.392.491-1.392s-.819-.205-1.269-.368c-.491-.205-.86-.41-1.064-.86-.246-.532-.082-.819.45-.983.205-.082 1.801-.368 2.293-.45.614-.082 1.228-.164 1.801-.246.532-.082 2.907-.327 3.644-.327 1.146.04 1.883.491 2.58 1.474.368.532.614 1.146.081 1.474-.86.49-3.562.532-4.053.573h-1.883l-.574 1.842s1.966-.04 3.03-.04c.287 0 .532 0 .696.04.573.123.737.573.778 1.187.041.737-.123 1.065-.696 1.147-.287.04-3.644.082-4.094.123l-.573.081s-.246.615-.45 1.27c-.205.655-.41 1.35-.41 1.35h.327c.246 0 .492-.04.656-.081 1.023-.205 2.538-.41 3.807-.614.655-.123 1.024-.164 1.351.286.287.41.45.737.492 1.188 0 .45-.328.737-.737 1.064-1.31 1.024-3.562 2.088-5.241 2.293-.778.082-.983 0-1.638-.164-.123-.04-.614-.246-.614-.287-.082-.081-.327-.245-.41-.327Zm21.167-9.294c-.86.737-1.965 2.211-2.498 2.948-.696 1.023-1.392 2.17-2.006 3.07-.123.205-.532.942-.532.942.04.041.45.041.86-.04.9-.165 2.129-.779 2.825-1.31a5.941 5.941 0 0 0 2.047-3.194c.164-.573.205-1.843-.205-2.375-.123-.082-.327-.164-.491-.04Zm-6.879 10.604s-.286.819-.49 1.433c-.328 1.105-1.106 4.012-1.27 4.913-.246 1.351-1.024 4.872-1.065 4.954-.04.123-.081.123-.204.205-.328.163-.45.122-.819-.082-.491-.246-.9-.532-1.27-1.024-.736-.941-.572-2.743-.409-3.807.492-3.685 1.024-5.323 2.416-9.008.04-.081.04-.081 0-.122-.45-.942-.655-2.047-.655-2.99 0-2.906 1.678-5.73 3.52-8.024.124-.163 1.065-1.269 1.475-1.228.41 0 .491.491.41.9-.206 1.352-1.147 2.703-1.802 3.808-.737 1.27-.86 1.76-1.228 2.907-.041.164-.205 1.024-.205 1.147 0 .327.082.696.082.696s1.187-1.638 1.965-2.662c.41-.573.737-.941 1.064-1.31.369-.41 1.72-1.842 2.13-2.21.818-.778 1.187-1.106 2.087-1.597.696-.369 1.352-.45 2.048 0 1.105.737 1.596 2.252 1.72 3.48.163 1.474-.165 3.152-.82 4.421-.778 1.515-1.842 2.62-3.275 3.562-1.474.983-3.194 1.638-4.913 1.597-.205.041-.492.041-.492.041Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 103 57" aria-label="Amazon"><g clip-path="url(#Amazon_svg__a)"><path d="M63.414 41.166c-5.897 4.347-14.445 6.666-21.805 6.666-10.319 0-19.609-3.817-26.637-10.165-.552-.5-.057-1.18.605-.79 7.585 4.412 16.963 7.067 26.65 7.067 6.534 0 13.722-1.352 20.33-4.157.998-.424 1.833.654.857 1.379Z"></path><path d="M65.866 38.36c-.75-.962-4.983-.454-6.882-.229-.579.07-.667-.433-.146-.795 3.37-2.372 8.901-1.688 9.546-.892.645.8-.168 6.343-3.335 8.99-.486.406-.95.19-.733-.35.71-1.776 2.305-5.756 1.55-6.723Zm-6.75-17.77v-2.307c0-.349.265-.583.583-.583h10.324c.331 0 .597.239.597.583v1.975c-.005.331-.283.764-.778 1.449l-5.35 7.638c1.988-.049 4.087.247 5.889 1.263.406.23.517.566.548.897v2.46c0 .336-.371.73-.76.526-3.176-1.665-7.395-1.846-10.907.018-.358.194-.733-.195-.733-.53v-2.337c0-.376.004-1.016.38-1.586l6.197-8.888h-5.393c-.332 0-.597-.234-.597-.579ZM21.457 34.977h-3.14a.593.593 0 0 1-.562-.534v-16.12a.59.59 0 0 1 .606-.579h2.928a.592.592 0 0 1 .57.54v2.107h.058c.764-2.037 2.2-2.987 4.134-2.987 1.966 0 3.194.95 4.078 2.986.76-2.036 2.487-2.986 4.338-2.986 1.316 0 2.756.544 3.635 1.763.994 1.356.791 3.326.791 5.053l-.004 10.174c0 .322-.27.583-.606.583h-3.136a.597.597 0 0 1-.565-.583v-8.543c0-.68.061-2.377-.089-3.022-.234-1.082-.936-1.387-1.846-1.387-.76 0-1.555.508-1.878 1.32-.322.814-.291 2.174-.291 3.088v8.544c0 .322-.27.583-.606.583h-3.136a.594.594 0 0 1-.565-.583l-.005-8.543c0-1.798.296-4.444-1.935-4.444-2.257 0-2.169 2.58-2.169 4.444v8.543a.593.593 0 0 1-.605.583Zm58.05-17.573c4.66 0 7.183 4.003 7.183 9.091 0 4.917-2.788 8.818-7.183 8.818-4.577 0-7.068-4.002-7.068-8.99 0-5.018 2.522-8.919 7.068-8.919Zm.026 3.291c-2.314 0-2.46 3.154-2.46 5.12 0 1.97-.031 6.176 2.434 6.176 2.434 0 2.549-3.393 2.549-5.46 0-1.36-.058-2.986-.468-4.276-.354-1.122-1.056-1.56-2.054-1.56ZM9.711 27.277v-.68c-2.27 0-4.67.486-4.67 3.163 0 1.356.703 2.275 1.91 2.275.883 0 1.673-.543 2.173-1.427.618-1.087.587-2.107.587-3.33Zm3.168 7.656a.656.656 0 0 1-.743.075c-1.042-.866-1.228-1.268-1.802-2.094-1.723 1.758-2.942 2.284-5.177 2.284-2.642 0-4.7-1.63-4.7-4.895 0-2.549 1.382-4.285 3.348-5.133 1.705-.75 4.086-.883 5.906-1.091v-.407c0-.746.058-1.63-.38-2.274-.384-.58-1.117-.818-1.762-.818-1.197 0-2.266.614-2.527 1.887-.053.282-.26.56-.543.574l-3.049-.327c-.256-.057-.538-.265-.468-.658.703-3.693 4.038-4.806 7.024-4.806 1.528 0 3.525.406 4.731 1.563 1.529 1.427 1.383 3.331 1.383 5.403v4.894c0 1.471.61 2.116 1.184 2.912.203.282.247.623-.01.834a133.4 133.4 0 0 0-2.407 2.086l-.008-.01Zm79.854.044h-3.127a.597.597 0 0 1-.566-.583l-.004-16.124a.594.594 0 0 1 .605-.526h2.911c.274.014.5.2.561.451v2.465h.057c.88-2.204 2.112-3.256 4.281-3.256 1.41 0 2.783.508 3.666 1.9.822 1.29.822 3.459.822 5.018V34.47c-.035.283-.296.508-.605.508h-3.15c-.287-.022-.525-.234-.556-.508v-8.755c0-1.763.203-4.343-1.966-4.343-.764 0-1.467.513-1.816 1.29-.442.985-.499 1.966-.499 3.053v8.68a.604.604 0 0 1-.614.583Zm-42.307-7.7v-.68c-2.27 0-4.67.486-4.67 3.163 0 1.356.703 2.275 1.91 2.275.883 0 1.673-.543 2.173-1.427.618-1.087.587-2.107.587-3.33Zm3.167 7.656a.656.656 0 0 1-.742.075c-1.042-.866-1.228-1.268-1.802-2.094-1.723 1.758-2.942 2.284-5.177 2.284-2.642 0-4.7-1.63-4.7-4.895 0-2.549 1.382-4.285 3.348-5.133 1.705-.75 4.086-.883 5.906-1.091v-.407c0-.746.057-1.63-.38-2.274-.384-.58-1.117-.818-1.763-.818-1.197 0-2.266.614-2.526 1.887-.053.282-.26.56-.544.574l-3.048-.327c-.256-.057-.539-.265-.468-.658.702-3.693 4.038-4.806 7.024-4.806 1.528 0 3.525.406 4.731 1.563 1.528 1.427 1.383 3.331 1.383 5.403v4.894c0 1.471.61 2.117 1.184 2.912.203.282.247.623-.01.834a133.4 133.4 0 0 0-2.407 2.086l-.009-.01Z"></path></g><defs><clipPath id="Amazon_svg__a"><path d="M0 0h102v39H0z" transform="translate(.198 8.52)"></path></clipPath></defs></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 99 57" aria-label="Neftlix"><path fill-rule="evenodd" d="M14.037 39.775c-.875.155-1.756.246-2.654.339-.622.064-1.251.129-1.892.217L4.743 26.197v14.738c-1.343.141-2.569.33-3.825.522l-.414.064v-27h3.94l5.412 15.314V14.521h4.181v25.254Zm11.077-15.413c.982-.02 1.943-.038 2.667-.038v4.224c-1.845 0-4.008 0-5.565.078v6.272c.725-.047 1.45-.098 2.175-.15 1.718-.122 3.44-.244 5.178-.299v4.068l-11.505.926V14.521h11.505v4.214h-7.343v5.667c.823 0 1.867-.02 2.888-.04Zm15.604-5.618h4.306l.01-.01v-4.213H32.25v4.214h4.306v19.45c1.356-.059 2.759-.059 4.162-.059V18.744Zm11.063 5.366h5.689v4.223h-5.69v9.57h-4.084V14.52h11.61v4.214H51.77v5.384l.01-.01Zm19.64 10.38c-1.773-.113-3.579-.228-5.368-.265V14.52h-4.152v23.684c3.786.078 7.506.312 11.217.556v-4.166c-.562-.033-1.128-.069-1.697-.105Zm5.204 4.553c1.327.078 2.73.166 4.076.322V14.521h-4.076v24.522Zm17.023-11.685 5.277-12.837h-4.547l-2.92 7.091-2.72-7.091h-4.461l4.825 12.68-5.343 12.36c.635.09 1.263.157 1.891.223.854.09 1.708.18 2.578.332l3.037-7.17 2.989 7.804.525.093c1.382.243 2.764.486 4.146.668l-5.276-14.153Z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 46 57" aria-label="Adobe"><path d="M16.726 8.02H0v40l16.726-40Zm11.768 0h16.703v40l-16.704-40ZM22.61 22.763l10.645 25.258h-6.984l-3.182-8.042H15.3l7.31-17.216Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 64 57" aria-label="Salesforce"><path d="M41.087 26.676c0 .624-.116 1.115-.346 1.463-.226.344-.569.511-1.047.511-.48 0-.82-.166-1.043-.511-.226-.347-.34-.84-.34-1.463 0-.624.114-1.114.34-1.458.222-.34.564-.506 1.043-.506.478 0 .82.166 1.048.506.229.344.345.834.345 1.458Zm11.799-.598c.051-.347.147-.635.295-.86.223-.341.563-.528 1.041-.528s.794.188 1.021.528c.15.225.216.526.242.86h-2.599ZM24 25.218c-.148.225-.242.513-.294.86h2.598c-.026-.334-.091-.635-.24-.86-.228-.34-.544-.528-1.022-.528-.479 0-.819.187-1.042.528Zm-8.17 3.245c-.142-.113-.162-.142-.21-.215-.072-.112-.109-.272-.109-.474 0-.32.106-.55.325-.706-.002.001.314-.273 1.057-.263.522.007.989.084.989.084v1.657s-.462.1-.984.13c-.741.045-1.07-.213-1.068-.212Z"></path><path fill-rule="evenodd" d="M34.35 7.397c-3.122 0-5.945 1.31-7.972 3.423a12.194 12.194 0 0 0-9.708-4.8c-6.743 0-12.21 5.46-12.21 12.194 0 1.723.36 3.363 1.005 4.849A10.618 10.618 0 0 0 .22 32.245c0 5.855 4.697 10.601 10.492 10.601.74 0 1.46-.077 2.156-.225 1.592 4.32 5.74 7.399 10.607 7.399 4.674 0 8.683-2.839 10.405-6.887a9.904 9.904 0 0 0 12.98-4.077c.864.174 1.756.265 2.67.265 7.484 0 13.552-6.12 13.552-13.67S57.013 11.98 49.529 11.98c-1.951 0-3.806.416-5.481 1.165-1.928-3.435-5.549-5.749-9.698-5.749Zm3.331 14.11a3.142 3.142 0 0 0-.36-.086 2.86 2.86 0 0 0-.495-.037c-.659 0-1.178.186-1.543.553-.362.365-.608.921-.732 1.653l-.045.246h-.827s-.1-.003-.122.106l-.135.759c-.01.071.021.117.118.117h.805l-.817 4.56a5.644 5.644 0 0 1-.218.898c-.08.225-.158.395-.255.518a.678.678 0 0 1-.333.257c-.125.042-.27.062-.429.062a1.59 1.59 0 0 1-.291-.032.86.86 0 0 1-.198-.064s-.093-.036-.131.058c-.03.078-.245.668-.27.74-.026.073.01.13.056.147a2.23 2.23 0 0 0 .867.148c.335 0 .64-.048.894-.14.255-.091.477-.252.674-.468.212-.235.345-.48.473-.816.126-.331.234-.743.32-1.223l.821-4.645h1.2s.101.003.122-.107l.136-.757c.009-.073-.022-.118-.12-.118h-1.164l.002-.012.004-.023a4.81 4.81 0 0 1 .186-.787 1.07 1.07 0 0 1 .256-.388.765.765 0 0 1 .305-.19c.115-.038.247-.056.391-.056.11 0 .218.013.3.03.112.024.156.037.186.046.119.035.135 0 .158-.057l.279-.765c.028-.082-.042-.117-.068-.127Zm-28.34 7.464c-.02-.018-.05-.047-.018-.133l.254-.705c.04-.122.133-.082.17-.058l.084.053c.037.024.077.05.129.08a3.05 3.05 0 0 0 1.66.478c.561 0 .909-.297.909-.697v-.021c0-.436-.534-.6-1.153-.791h-.002l-.137-.043c-.852-.243-1.76-.593-1.76-1.67v-.021c0-1.022.823-1.735 2.003-1.735h.13c.692 0 1.362.2 1.847.495.043.027.086.077.062.146a97.47 97.47 0 0 1-.262.705c-.046.121-.17.04-.17.04a3.718 3.718 0 0 0-1.64-.419c-.499 0-.821.265-.821.625v.023c0 .42.551.6 1.19.807l.111.036c.848.268 1.752.639 1.752 1.66v.021c0 1.104-.801 1.79-2.09 1.79-.634 0-1.239-.1-1.88-.44a8.101 8.101 0 0 0-.076-.042c-.095-.053-.19-.106-.283-.174l-.003-.003-.002-.003-.005-.004Zm18.877 0c-.019-.018-.05-.047-.017-.133l.254-.705c.037-.116.147-.074.17-.058l.043.027c.05.033.098.065.17.106a3.05 3.05 0 0 0 1.66.478c.56 0 .91-.297.91-.697v-.021c0-.436-.535-.6-1.154-.79l-.14-.044c-.852-.243-1.76-.593-1.76-1.67v-.021c0-1.022.823-1.735 2.004-1.735h.129c.693 0 1.363.2 1.847.495.044.027.087.077.063.146l-.263.705c-.045.121-.17.04-.17.04a3.718 3.718 0 0 0-1.639-.419c-.5 0-.822.265-.822.625v.023c0 .42.552.6 1.19.807l.111.036c.849.268 1.752.639 1.752 1.66v.021c0 1.104-.8 1.79-2.09 1.79-.633 0-1.238-.1-1.88-.44a9.636 9.636 0 0 0-.075-.042 2.675 2.675 0 0 1-.294-.184Zm13.945-3.452a2.59 2.59 0 0 0-.49-.935 2.367 2.367 0 0 0-.826-.629 2.718 2.718 0 0 0-1.153-.23 2.72 2.72 0 0 0-1.155.23 2.38 2.38 0 0 0-.827.629 2.632 2.632 0 0 0-.49.935 4.092 4.092 0 0 0-.157 1.157c0 .412.053.802.157 1.157a2.6 2.6 0 0 0 .491.934c.22.264.498.474.826.624.33.15.718.225 1.155.225.436 0 .824-.076 1.153-.225.329-.15.607-.36.827-.624a2.59 2.59 0 0 0 .49-.934 4.09 4.09 0 0 0 .158-1.157 4.05 4.05 0 0 0-.159-1.157Zm8.703 2.899s.1-.04.137.065l.264.73c.034.09-.044.128-.044.128a4.38 4.38 0 0 1-1.524.272c-.933 0-1.649-.269-2.125-.8-.476-.527-.717-1.25-.717-2.142 0-.413.06-.803.176-1.159a2.67 2.67 0 0 1 .524-.935c.23-.263.523-.474.867-.627a2.928 2.928 0 0 1 1.2-.231c.302 0 .574.018.807.054.25.038.579.127.718.181.026.01.095.045.067.126-.068.196-.123.345-.18.502l-.038.105-.046.13c-.04.11-.126.074-.126.074a3.576 3.576 0 0 0-1.137-.163c-.533 0-.932.178-1.195.525-.264.35-.41.808-.413 1.418-.001.67.165 1.165.463 1.471.296.306.71.461 1.23.461.213 0 .411-.014.591-.042a2.41 2.41 0 0 0 .5-.143Zm5.644-3.102a2.263 2.263 0 0 0-.466-.853c-.235-.252-.464-.429-.692-.527a2.664 2.664 0 0 0-1.044-.212c-.455 0-.867.077-1.202.234a2.393 2.393 0 0 0-.84.64 2.626 2.626 0 0 0-.493.946c-.107.36-.16.75-.16 1.163 0 .42.055.812.166 1.163.11.355.288.668.528.926.239.261.547.465.916.608.366.141.811.215 1.322.214 1.053-.004 1.607-.239 1.835-.365.04-.022.08-.062.03-.175l-.237-.667c-.036-.099-.137-.062-.137-.062l-.028.01-.027.01-.017.007c-.258.098-.635.243-1.424.241-.565 0-.984-.167-1.246-.428-.27-.267-.402-.659-.425-1.212l3.644.003s.096-.001.105-.095l.003-.016a3.912 3.912 0 0 0-.11-1.553Zm-29.647-.853c.149.16.374.508.466.853a3.9 3.9 0 0 1 .111 1.553l-.002.017c-.01.093-.106.094-.106.094l-3.643-.003c.023.553.154.945.424 1.212.262.26.681.427 1.246.428.79.002 1.167-.143 1.424-.241l.034-.013.038-.014s.101-.037.138.062l.237.667c.049.113.01.153-.03.175-.229.126-.783.361-1.835.365-.511 0-.956-.073-1.323-.214a2.393 2.393 0 0 1-.916-.608 2.406 2.406 0 0 1-.528-.925 3.898 3.898 0 0 1-.166-1.164c0-.413.055-.804.16-1.163.106-.36.273-.679.494-.946.221-.267.503-.482.839-.64.335-.157.748-.234 1.203-.234.39 0 .746.085 1.044.212.227.098.456.275.691.527Zm-9.583 1.44a8.065 8.065 0 0 0-.569-.017c-.312 0-.614.04-.897.116a2.34 2.34 0 0 0-.761.353c-.221.158-.4.36-.529.6a1.77 1.77 0 0 0-.194.84c0 .323.056.603.167.832a1.5 1.5 0 0 0 .475.57c.203.148.452.256.743.321.285.066.61.099.964.099.373 0 .746-.03 1.107-.092.357-.061.796-.15.918-.178.12-.028.255-.065.255-.065.09-.022.083-.12.083-.12l-.002-3.331c0-.73-.195-1.273-.579-1.608-.382-.335-.946-.505-1.674-.505-.273 0-.712.038-.976.09 0 0-.796.155-1.123.411 0 0-.072.045-.033.145l.258.693c.032.09.12.06.12.06s.027-.012.06-.03c.7-.382 1.587-.37 1.587-.37.394 0 .697.079.9.235.2.153.3.383.3.868v.154c-.313-.045-.6-.07-.6-.07Zm29.333-2.008a.1.1 0 0 1 .055.131c-.034.1-.212.598-.274.765-.024.063-.063.106-.133.098 0 0-.21-.049-.4-.049-.133 0-.32.017-.49.069a1.118 1.118 0 0 0-.45.27c-.132.13-.24.311-.318.537-.08.228-.121.592-.121.956v2.715a.11.11 0 0 1-.11.111h-.958a.112.112 0 0 1-.11-.11v-5.435c0-.062.043-.111.104-.111h.934c.061 0 .105.049.105.11v.444c.14-.187.39-.352.616-.454.227-.102.482-.18.94-.151.238.015.548.08.61.104Zm-25.314 5.602c.061 0 .105-.049.105-.11v-7.776c0-.06-.044-.11-.105-.11h-.966c-.06 0-.104.05-.104.11v7.776c0 .061.043.11.104.11h.966Z" clip-rule="evenodd"></path></svg><div class="ALjV_FDtdiJ2rGCAH1Lg Frz0pvOJ0fp95qyyJfFZ"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 151 57" aria-label="Microsoft"><path d="m53.302 30.452-.893 2.53h-.075a17.98 17.98 0 0 0-.868-2.48L46.678 18.47H41.99v19.175h3.1V25.813c0-.744 0-1.588-.024-2.63-.025-.52-.074-.918-.1-1.215h.075a11.6 11.6 0 0 0 .447 1.637l5.755 13.99h2.183l5.705-14.114c.124-.322.248-.967.372-1.513h.075a178.288 178.288 0 0 0-.15 3.448V37.57h3.3V18.42h-4.515l-4.911 12.03Zm12.552-6.624h3.225v13.743h-3.225V23.828Zm1.637-5.804c-.546 0-.992.198-1.364.545a1.76 1.76 0 0 0-.57 1.34c0 .52.197.967.57 1.315.372.347.818.52 1.364.52.546 0 1.017-.198 1.364-.52.372-.348.57-.794.57-1.315 0-.521-.198-.967-.57-1.34-.322-.347-.794-.545-1.364-.545Zm13.023 5.68a8.998 8.998 0 0 0-1.81-.198c-1.464 0-2.804.322-3.92.967s-2.01 1.538-2.58 2.655c-.595 1.14-.893 2.455-.893 3.968 0 1.315.298 2.481.868 3.548.57 1.042 1.365 1.885 2.431 2.456 1.017.57 2.208.868 3.548.868 1.538 0 2.852-.323 3.894-.918l.025-.025v-2.977l-.124.1a5.544 5.544 0 0 1-1.563.818c-.57.199-1.091.298-1.538.298-1.29 0-2.307-.372-3.026-1.19-.744-.794-1.116-1.886-1.116-3.25 0-1.414.372-2.53 1.14-3.35.77-.818 1.787-1.24 3.027-1.24 1.042 0 2.109.348 3.076 1.042l.124.1v-3.15l-.025-.026c-.422-.173-.893-.372-1.538-.496Zm10.642-.099c-.794 0-1.538.248-2.183.77-.546.446-.918 1.09-1.24 1.86h-.025v-2.407h-3.225v13.743h3.225v-7.02c0-1.19.248-2.183.794-2.902.546-.745 1.24-1.117 2.084-1.117.297 0 .595.075.967.124.347.1.595.199.769.323l.124.099v-3.225l-.074-.025c-.224-.148-.67-.223-1.216-.223Zm8.781-.074c-2.257 0-4.068.67-5.333 1.984-1.29 1.315-1.91 3.126-1.91 5.408 0 2.133.645 3.87 1.885 5.135 1.24 1.24 2.927 1.885 5.036 1.885 2.208 0 3.969-.67 5.234-2.01 1.29-1.339 1.91-3.125 1.91-5.333 0-2.183-.595-3.919-1.811-5.184-1.166-1.265-2.877-1.885-5.01-1.885Zm2.58 10.567c-.595.77-1.538 1.141-2.704 1.141-1.166 0-2.108-.372-2.778-1.19-.67-.77-.992-1.886-.992-3.3 0-1.463.347-2.58.992-3.373.67-.794 1.588-1.191 2.754-1.191 1.141 0 2.034.372 2.679 1.141s.992 1.885.992 3.349c-.05 1.488-.323 2.654-.943 3.423Zm11.436-4.564c-1.017-.422-1.662-.744-1.96-1.017-.248-.248-.372-.596-.372-1.042 0-.372.149-.744.521-.992s.794-.373 1.414-.373c.546 0 1.116.1 1.662.249.546.148 1.042.372 1.439.67l.124.099V24.1l-.075-.025a8.95 8.95 0 0 0-1.463-.421 9.943 9.943 0 0 0-1.588-.15c-1.538 0-2.803.373-3.795 1.192-.992.768-1.464 1.81-1.464 3.026 0 .645.1 1.215.323 1.687.223.471.546.918.992 1.29.447.347 1.092.744 1.985 1.116.744.322 1.314.57 1.662.769.347.198.57.422.744.595.124.199.198.447.198.77 0 .917-.694 1.364-2.108 1.364-.546 0-1.117-.1-1.786-.323a6.898 6.898 0 0 1-1.811-.918l-.124-.099v3.15l.074.025c.472.224 1.042.372 1.737.546.694.124 1.314.223 1.86.223 1.662 0 3.026-.372 3.994-1.19.992-.794 1.513-1.811 1.513-3.126 0-.918-.248-1.736-.794-2.357a10.048 10.048 0 0 0-2.902-1.711Zm12.205-6.003c-2.258 0-4.069.67-5.334 1.984-1.265 1.315-1.91 3.126-1.91 5.408 0 2.133.645 3.87 1.885 5.135 1.241 1.24 2.928 1.885 5.036 1.885 2.208 0 3.969-.67 5.234-2.01 1.29-1.339 1.91-3.125 1.91-5.333 0-2.183-.595-3.919-1.811-5.184-1.165-1.265-2.877-1.885-5.01-1.885Zm2.555 10.567c-.596.77-1.538 1.141-2.704 1.141-1.191 0-2.109-.372-2.779-1.19-.669-.77-.992-1.886-.992-3.3 0-1.463.348-2.58.992-3.373.67-.794 1.588-1.191 2.754-1.191 1.116 0 2.034.372 2.679 1.141s.992 1.885.992 3.349c0 1.488-.322 2.654-.942 3.423Zm21.507-7.615v-2.655h-3.25V19.76l-.099.025-3.076.918-.075.025v3.1h-4.862v-1.736c0-.794.199-1.414.546-1.811.347-.397.868-.595 1.513-.595.447 0 .918.099 1.439.322l.124.075V17.28l-.074-.025c-.447-.15-1.042-.248-1.811-.248a5.81 5.81 0 0 0-2.58.595 4.298 4.298 0 0 0-1.761 1.761c-.422.744-.645 1.588-.645 2.555v1.91h-2.258v2.63h2.258V37.57h3.249V26.483h4.862v7.07c0 2.902 1.365 4.365 4.093 4.365.447 0 .918-.074 1.365-.149.471-.099.818-.223 1.017-.322l.025-.025v-2.654l-.124.1a2.103 2.103 0 0 1-.67.297 2.288 2.288 0 0 1-.645.099c-.645 0-1.092-.149-1.414-.52-.298-.348-.447-.919-.447-1.762v-6.5h3.3ZM.415 12.02H15.62v15.207H.415V12.021Zm16.794 0h15.206v15.207H17.21V12.021ZM.415 28.814H15.62v15.207H.415V28.814Zm16.794 0h15.206v15.207H17.21V28.814Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 100 57" aria-label="Disney"><path d="M40.792 16.699s.368-.574.696-1.024c.573-.778 1.638-1.883 2.416-2.58.245-.204.532-.45.532-.45s-.45.041-.696.082c-.614.123-1.474.696-1.924 1.065-.737.614-1.515 1.637-1.188 2.538.082.205.164.369.164.369Zm4.053 1.105a7.625 7.625 0 0 0 3.235-.983c.982-.532 2.415-1.637 2.293-2.907a1.044 1.044 0 0 0-.656-.86c-.45-.204-.655-.163-1.228 0-.41.124-.573.205-.982.41-1.147.655-2.744 2.047-3.603 3.194-.205.245-.41.573-.574.777-.122.123-.163.246-.163.287.04.123 1.228.123 1.678.082Zm-2.907 2.129c-.122.123-.245.41-.368.655-.082.123-.205.287-.287.328-.286.204-.532.245-.86-.041a1.963 1.963 0 0 1-.654-1.433c0-.246.04-.492 0-.696-.082-.328-.41-.696-.574-.983-.204-.368-.368-1.024-.41-1.474-.081-1.31.615-2.538 1.516-3.52.9-.983 2.129-1.802 3.398-2.335 1.228-.532 3.03-.86 4.38-.409.451.164 1.065.532 1.352.9.082.083.123.164.205.205.04.041.204.041.327.082.45.082 1.065.41 1.31.614.491.45.778.86.9 1.474.247 1.229-.45 2.58-1.268 3.399-1.392 1.392-2.743 2.415-4.504 3.07-.778.287-1.965.573-2.866.492-.286-.041-.573-.082-.819-.123-.123 0-.614-.123-.696-.164l-.082-.041Zm1.556 2.743c.041 0 .123.041.205.041.614.246.86.819 1.023 1.433.369 1.474.492 4.667.574 5.937.04.941.081 1.883.123 2.824.04.778.081 1.843-.082 2.58-.041.286-.246.573-.492.737-.286.204-.941.204-1.31.123-.9-.205-1.187-.778-1.31-1.679-.287-2.129-.164-6.305.04-8.065.042-.574.288-2.457.574-3.235.041-.246.287-.778.655-.696Zm-27.84 3.194s-1.351.081-2.252.204c-1.188.123-3.357.491-4.627.942-.368.123-1.146.45-1.228.86-.082.41.164.737.45 1.064.164.205 1.065 1.065 1.351 1.27 1.065.9 3.276 2.292 4.873 2.947.532.246 1.473.573 1.473.573s-.081-2.62-.04-5.158c-.041-1.351 0-2.703 0-2.703Zm24.524 1.023c.082.696-.123 2.006-.123 2.21-.04.41-.368 1.311-.41 1.434-.245.573-.49 1.023-.736 1.474-.45.778-1.474 2.047-2.088 2.58-2.293 2.005-5.855 3.11-8.926 3.48-2.088.245-4.462.204-6.673-.206a31.02 31.02 0 0 1-1.884-.409s0 .45-.04.778c0 .123-.123.532-.205.655-.164.328-.41.491-.82.573-.45.082-.94.123-1.391-.082-.696-.286-.942-.941-1.065-1.72-.082-.613-.204-1.637-.204-1.637s-.533-.246-.942-.45c-1.351-.655-2.62-1.474-3.726-2.293-.327-.246-1.637-1.351-1.924-1.597-.819-.778-1.556-1.556-2.13-2.538-.45-.778-.572-1.474-.245-2.293.45-1.146 2.088-2.006 3.235-2.497.819-.369 3.398-1.188 4.462-1.351.492-.082 1.27-.205 1.351-.246l.041-.041c.041-.041.082-1.187.041-1.597 0-.41.287-3.07.41-3.644.04-.327.286-1.473.532-1.801.164-.205.41-.205.655-.04 1.228.777 1.597 3.397 1.679 4.748.04.82.082 2.047.082 2.047s1.392-.04 2.252 0c.818.041 1.76.164 2.62.287 1.105.164 3.275.655 4.544 1.27 1.024.531 1.966 1.391 2.293 2.333.287.86.246 1.433-.205 2.21-.49.86-1.433 1.516-2.374 1.556-.287 0-1.351-.122-1.679-.368a.315.315 0 0 1-.04-.41c.04-.04.531-.286.818-.45.164-.082.287-.163.369-.286.245-.205.45-.45.45-.737-.041-.369-.41-.573-.778-.737-1.72-.655-5.077-1.229-6.756-1.351-.655-.041-1.555-.082-1.555-.082l.286 9.13s.737.164 1.351.245c.328.041 1.802.164 2.17.205 2.948.082 6.183-.164 8.885-1.474 1.187-.573 2.252-1.228 3.07-2.17 1.065-1.228 1.638-2.947 1.515-4.708-.163-1.924-1.515-4.217-2.62-5.609-2.866-3.685-7.779-6.714-12.119-8.516-4.422-1.801-8.802-2.866-13.47-3.03-1.228-.04-3.848 0-5.159.369-.204.04-.368.123-.573.164-.123.04-.368.122-.41.163l-.081.082.164.082c.123.082.737.082 1.023.164.287.04.573.205.655.41.123.204.123.327 0 .49-.286.37-1.433.287-1.924.246-.532-.082-1.146-.245-1.27-.696-.122-.532.124-1.064.37-1.555.532-.983 1.35-1.474 2.497-1.802 1.637-.45 3.685-.778 5.24-.819 3.521-.123 6.797.492 10.195 1.515 1.924.573 4.504 1.556 6.346 2.457a50.267 50.267 0 0 1 4.626 2.62c.369.246 2.539 1.842 2.907 2.129.696.573 1.638 1.392 2.293 2.088 1.31 1.27 2.907 3.234 3.685 4.79.205.369.328.737.573 1.187.082.164.45 1.024.491 1.31.041.246.164.615.164.656.041.04.205.819.205 1.105Zm15.067.655h.122c1.065.164 2.13.328 2.907.696.737.328 1.188.737 1.597 1.474.614 1.146.655 2.702.082 3.89-.41.9-1.31 1.637-2.13 2.047-.859.409-1.678.614-2.66.736-1.679.205-3.521-.163-5.036-.9-.9-.45-2.006-1.188-2.539-2.17-.409-.696-.409-1.638.082-2.334.778-1.064 2.457-1.31 3.767-1.269.983.041 2.702.328 3.644.655.245.082 1.187.45 1.35.614.124.123.206.287.124.45-.205.656-1.76.983-2.211 1.065-1.228.205-1.843-.287-3.194-.819-.327-.123-.777-.286-1.146-.327-.614-.041-1.392.122-1.474.778-.04.368.369.696.655.818.737.328 1.351.45 2.047.45 2.13.042 4.545-.327 6.305-1.555.246-.164.492-.41.492-.737 0-.04-.041-.368-.164-.41h-.041c-.041 0-.123-.122-.164-.204-.123-.164-.614-.369-.737-.41-1.187-.49-3.357-.736-4.503-.818-1.188-.082-3.03-.246-3.48-.328-.45-.082-.942-.164-1.352-.327a1.608 1.608 0 0 1-.9-1.024c-.205-.819.04-1.801.491-2.415 1.187-1.68 3.93-2.334 5.977-2.58 1.966-.245 5.2-.245 7.125.778.286.164.45.328.409.614-.123.614-.573.983-1.146 1.147-.574.163-1.761.245-2.293.286-2.334.123-5.2.082-7.41.655-.165.041-.492.123-.574.246-.368.368.655.491.86.532.082 0 .082 0 .123.041l4.995.655Zm7.328 8.803c-.941-.369-1.146-1.884-1.187-2.662-.164-2.538.532-6.018 1.351-8.393.246-.655.573-1.76 1.351-1.72.532.042.9.451 1.187.86.737 1.065 1.72 2.457 2.375 3.44.737 1.105 1.433 2.21 2.088 3.234.082.123.164.246.246.328.123.082.245.122.286 0 .041-.041-.04-1.31-.04-1.556-.041-.41-.083-.737-.123-1.106-.123-1.023-.45-2.456-.696-3.439-.287-1.064-.615-2.21-.86-3.275-.082-.328-.164-.696-.164-1.024 0-.45.287-.737.778-.573.982.328 2.252 2.416 2.62 3.153.123.245.614 1.474.737 1.842.41 1.187.655 2.334.737 3.644.123 1.27 0 3.111-.532 4.38-.205.451-.614 1.065-.942 1.393-.532.491-1.596.86-2.292.45-.778-.45-2.089-2.702-2.334-3.111-.737-1.31-2.047-3.89-2.252-4.177-.041-.082-.082-.122-.205-.163-.082-.041-.123.122-.123.245-.122.737-.204 4.258-.204 4.381-.041.573-.041 2.047-.205 2.743-.123.45-.205.86-.655 1.065-.328.245-.573.163-.942.04Zm13.102-.246a1.574 1.574 0 0 1-.369-.368s-.368-.533-.41-.697c-.04-.122-.122-.245-.163-.327-.328-.819-.287-1.597-.123-2.457.164-.818.328-.818.737-1.924.041-.04.041-.123.041-.164 0-.163-.246-1.187-.246-1.473 0-.492.369-.86 1.024-.901h.164c.245-.082.41-.573.573-.942.205-.573.491-1.392.491-1.392s-.819-.205-1.269-.368c-.491-.205-.86-.41-1.064-.86-.246-.532-.082-.819.45-.983.205-.082 1.801-.368 2.293-.45.614-.082 1.228-.164 1.801-.246.532-.082 2.907-.327 3.644-.327 1.146.04 1.883.491 2.58 1.474.368.532.614 1.146.081 1.474-.86.49-3.562.532-4.053.573h-1.883l-.574 1.842s1.966-.04 3.03-.04c.287 0 .532 0 .696.04.573.123.737.573.778 1.187.041.737-.123 1.065-.696 1.147-.287.04-3.644.082-4.094.123l-.573.081s-.246.615-.45 1.27c-.205.655-.41 1.35-.41 1.35h.327c.246 0 .492-.04.656-.081 1.023-.205 2.538-.41 3.807-.614.655-.123 1.024-.164 1.351.286.287.41.45.737.492 1.188 0 .45-.328.737-.737 1.064-1.31 1.024-3.562 2.088-5.241 2.293-.778.082-.983 0-1.638-.164-.123-.04-.614-.246-.614-.287-.082-.081-.327-.245-.41-.327Zm21.167-9.294c-.86.737-1.965 2.211-2.498 2.948-.696 1.023-1.392 2.17-2.006 3.07-.123.205-.532.942-.532.942.04.041.45.041.86-.04.9-.165 2.129-.779 2.825-1.31a5.941 5.941 0 0 0 2.047-3.194c.164-.573.205-1.843-.205-2.375-.123-.082-.327-.164-.491-.04Zm-6.879 10.604s-.286.819-.49 1.433c-.328 1.105-1.106 4.012-1.27 4.913-.246 1.351-1.024 4.872-1.065 4.954-.04.123-.081.123-.204.205-.328.163-.45.122-.819-.082-.491-.246-.9-.532-1.27-1.024-.736-.941-.572-2.743-.409-3.807.492-3.685 1.024-5.323 2.416-9.008.04-.081.04-.081 0-.122-.45-.942-.655-2.047-.655-2.99 0-2.906 1.678-5.73 3.52-8.024.124-.163 1.065-1.269 1.475-1.228.41 0 .491.491.41.9-.206 1.352-1.147 2.703-1.802 3.808-.737 1.27-.86 1.76-1.228 2.907-.041.164-.205 1.024-.205 1.147 0 .327.082.696.082.696s1.187-1.638 1.965-2.662c.41-.573.737-.941 1.064-1.31.369-.41 1.72-1.842 2.13-2.21.818-.778 1.187-1.106 2.087-1.597.696-.369 1.352-.45 2.048 0 1.105.737 1.596 2.252 1.72 3.48.163 1.474-.165 3.152-.82 4.421-.778 1.515-1.842 2.62-3.275 3.562-1.474.983-3.194 1.638-4.913 1.597-.205.041-.492.041-.492.041Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 103 57" aria-label="Amazon"><g clip-path="url(#Amazon_svg__a)"><path d="M63.414 41.166c-5.897 4.347-14.445 6.666-21.805 6.666-10.319 0-19.609-3.817-26.637-10.165-.552-.5-.057-1.18.605-.79 7.585 4.412 16.963 7.067 26.65 7.067 6.534 0 13.722-1.352 20.33-4.157.998-.424 1.833.654.857 1.379Z"></path><path d="M65.866 38.36c-.75-.962-4.983-.454-6.882-.229-.579.07-.667-.433-.146-.795 3.37-2.372 8.901-1.688 9.546-.892.645.8-.168 6.343-3.335 8.99-.486.406-.95.19-.733-.35.71-1.776 2.305-5.756 1.55-6.723Zm-6.75-17.77v-2.307c0-.349.265-.583.583-.583h10.324c.331 0 .597.239.597.583v1.975c-.005.331-.283.764-.778 1.449l-5.35 7.638c1.988-.049 4.087.247 5.889 1.263.406.23.517.566.548.897v2.46c0 .336-.371.73-.76.526-3.176-1.665-7.395-1.846-10.907.018-.358.194-.733-.195-.733-.53v-2.337c0-.376.004-1.016.38-1.586l6.197-8.888h-5.393c-.332 0-.597-.234-.597-.579ZM21.457 34.977h-3.14a.593.593 0 0 1-.562-.534v-16.12a.59.59 0 0 1 .606-.579h2.928a.592.592 0 0 1 .57.54v2.107h.058c.764-2.037 2.2-2.987 4.134-2.987 1.966 0 3.194.95 4.078 2.986.76-2.036 2.487-2.986 4.338-2.986 1.316 0 2.756.544 3.635 1.763.994 1.356.791 3.326.791 5.053l-.004 10.174c0 .322-.27.583-.606.583h-3.136a.597.597 0 0 1-.565-.583v-8.543c0-.68.061-2.377-.089-3.022-.234-1.082-.936-1.387-1.846-1.387-.76 0-1.555.508-1.878 1.32-.322.814-.291 2.174-.291 3.088v8.544c0 .322-.27.583-.606.583h-3.136a.594.594 0 0 1-.565-.583l-.005-8.543c0-1.798.296-4.444-1.935-4.444-2.257 0-2.169 2.58-2.169 4.444v8.543a.593.593 0 0 1-.605.583Zm58.05-17.573c4.66 0 7.183 4.003 7.183 9.091 0 4.917-2.788 8.818-7.183 8.818-4.577 0-7.068-4.002-7.068-8.99 0-5.018 2.522-8.919 7.068-8.919Zm.026 3.291c-2.314 0-2.46 3.154-2.46 5.12 0 1.97-.031 6.176 2.434 6.176 2.434 0 2.549-3.393 2.549-5.46 0-1.36-.058-2.986-.468-4.276-.354-1.122-1.056-1.56-2.054-1.56ZM9.711 27.277v-.68c-2.27 0-4.67.486-4.67 3.163 0 1.356.703 2.275 1.91 2.275.883 0 1.673-.543 2.173-1.427.618-1.087.587-2.107.587-3.33Zm3.168 7.656a.656.656 0 0 1-.743.075c-1.042-.866-1.228-1.268-1.802-2.094-1.723 1.758-2.942 2.284-5.177 2.284-2.642 0-4.7-1.63-4.7-4.895 0-2.549 1.382-4.285 3.348-5.133 1.705-.75 4.086-.883 5.906-1.091v-.407c0-.746.058-1.63-.38-2.274-.384-.58-1.117-.818-1.762-.818-1.197 0-2.266.614-2.527 1.887-.053.282-.26.56-.543.574l-3.049-.327c-.256-.057-.538-.265-.468-.658.703-3.693 4.038-4.806 7.024-4.806 1.528 0 3.525.406 4.731 1.563 1.529 1.427 1.383 3.331 1.383 5.403v4.894c0 1.471.61 2.116 1.184 2.912.203.282.247.623-.01.834a133.4 133.4 0 0 0-2.407 2.086l-.008-.01Zm79.854.044h-3.127a.597.597 0 0 1-.566-.583l-.004-16.124a.594.594 0 0 1 .605-.526h2.911c.274.014.5.2.561.451v2.465h.057c.88-2.204 2.112-3.256 4.281-3.256 1.41 0 2.783.508 3.666 1.9.822 1.29.822 3.459.822 5.018V34.47c-.035.283-.296.508-.605.508h-3.15c-.287-.022-.525-.234-.556-.508v-8.755c0-1.763.203-4.343-1.966-4.343-.764 0-1.467.513-1.816 1.29-.442.985-.499 1.966-.499 3.053v8.68a.604.604 0 0 1-.614.583Zm-42.307-7.7v-.68c-2.27 0-4.67.486-4.67 3.163 0 1.356.703 2.275 1.91 2.275.883 0 1.673-.543 2.173-1.427.618-1.087.587-2.107.587-3.33Zm3.167 7.656a.656.656 0 0 1-.742.075c-1.042-.866-1.228-1.268-1.802-2.094-1.723 1.758-2.942 2.284-5.177 2.284-2.642 0-4.7-1.63-4.7-4.895 0-2.549 1.382-4.285 3.348-5.133 1.705-.75 4.086-.883 5.906-1.091v-.407c0-.746.057-1.63-.38-2.274-.384-.58-1.117-.818-1.763-.818-1.197 0-2.266.614-2.526 1.887-.053.282-.26.56-.544.574l-3.048-.327c-.256-.057-.539-.265-.468-.658.702-3.693 4.038-4.806 7.024-4.806 1.528 0 3.525.406 4.731 1.563 1.528 1.427 1.383 3.331 1.383 5.403v4.894c0 1.471.61 2.117 1.184 2.912.203.282.247.623-.01.834a133.4 133.4 0 0 0-2.407 2.086l-.009-.01Z"></path></g><defs><clipPath id="Amazon_svg__a"><path d="M0 0h102v39H0z" transform="translate(.198 8.52)"></path></clipPath></defs></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 99 57" aria-label="Neftlix"><path fill-rule="evenodd" d="M14.037 39.775c-.875.155-1.756.246-2.654.339-.622.064-1.251.129-1.892.217L4.743 26.197v14.738c-1.343.141-2.569.33-3.825.522l-.414.064v-27h3.94l5.412 15.314V14.521h4.181v25.254Zm11.077-15.413c.982-.02 1.943-.038 2.667-.038v4.224c-1.845 0-4.008 0-5.565.078v6.272c.725-.047 1.45-.098 2.175-.15 1.718-.122 3.44-.244 5.178-.299v4.068l-11.505.926V14.521h11.505v4.214h-7.343v5.667c.823 0 1.867-.02 2.888-.04Zm15.604-5.618h4.306l.01-.01v-4.213H32.25v4.214h4.306v19.45c1.356-.059 2.759-.059 4.162-.059V18.744Zm11.063 5.366h5.689v4.223h-5.69v9.57h-4.084V14.52h11.61v4.214H51.77v5.384l.01-.01Zm19.64 10.38c-1.773-.113-3.579-.228-5.368-.265V14.52h-4.152v23.684c3.786.078 7.506.312 11.217.556v-4.166c-.562-.033-1.128-.069-1.697-.105Zm5.204 4.553c1.327.078 2.73.166 4.076.322V14.521h-4.076v24.522Zm17.023-11.685 5.277-12.837h-4.547l-2.92 7.091-2.72-7.091h-4.461l4.825 12.68-5.343 12.36c.635.09 1.263.157 1.891.223.854.09 1.708.18 2.578.332l3.037-7.17 2.989 7.804.525.093c1.382.243 2.764.486 4.146.668l-5.276-14.153Z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 46 57" aria-label="Adobe"><path d="M16.726 8.02H0v40l16.726-40Zm11.768 0h16.703v40l-16.704-40ZM22.61 22.763l10.645 25.258h-6.984l-3.182-8.042H15.3l7.31-17.216Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 64 57" aria-label="Salesforce"><path d="M41.087 26.676c0 .624-.116 1.115-.346 1.463-.226.344-.569.511-1.047.511-.48 0-.82-.166-1.043-.511-.226-.347-.34-.84-.34-1.463 0-.624.114-1.114.34-1.458.222-.34.564-.506 1.043-.506.478 0 .82.166 1.048.506.229.344.345.834.345 1.458Zm11.799-.598c.051-.347.147-.635.295-.86.223-.341.563-.528 1.041-.528s.794.188 1.021.528c.15.225.216.526.242.86h-2.599ZM24 25.218c-.148.225-.242.513-.294.86h2.598c-.026-.334-.091-.635-.24-.86-.228-.34-.544-.528-1.022-.528-.479 0-.819.187-1.042.528Zm-8.17 3.245c-.142-.113-.162-.142-.21-.215-.072-.112-.109-.272-.109-.474 0-.32.106-.55.325-.706-.002.001.314-.273 1.057-.263.522.007.989.084.989.084v1.657s-.462.1-.984.13c-.741.045-1.07-.213-1.068-.212Z"></path><path fill-rule="evenodd" d="M34.35 7.397c-3.122 0-5.945 1.31-7.972 3.423a12.194 12.194 0 0 0-9.708-4.8c-6.743 0-12.21 5.46-12.21 12.194 0 1.723.36 3.363 1.005 4.849A10.618 10.618 0 0 0 .22 32.245c0 5.855 4.697 10.601 10.492 10.601.74 0 1.46-.077 2.156-.225 1.592 4.32 5.74 7.399 10.607 7.399 4.674 0 8.683-2.839 10.405-6.887a9.904 9.904 0 0 0 12.98-4.077c.864.174 1.756.265 2.67.265 7.484 0 13.552-6.12 13.552-13.67S57.013 11.98 49.529 11.98c-1.951 0-3.806.416-5.481 1.165-1.928-3.435-5.549-5.749-9.698-5.749Zm3.331 14.11a3.142 3.142 0 0 0-.36-.086 2.86 2.86 0 0 0-.495-.037c-.659 0-1.178.186-1.543.553-.362.365-.608.921-.732 1.653l-.045.246h-.827s-.1-.003-.122.106l-.135.759c-.01.071.021.117.118.117h.805l-.817 4.56a5.644 5.644 0 0 1-.218.898c-.08.225-.158.395-.255.518a.678.678 0 0 1-.333.257c-.125.042-.27.062-.429.062a1.59 1.59 0 0 1-.291-.032.86.86 0 0 1-.198-.064s-.093-.036-.131.058c-.03.078-.245.668-.27.74-.026.073.01.13.056.147a2.23 2.23 0 0 0 .867.148c.335 0 .64-.048.894-.14.255-.091.477-.252.674-.468.212-.235.345-.48.473-.816.126-.331.234-.743.32-1.223l.821-4.645h1.2s.101.003.122-.107l.136-.757c.009-.073-.022-.118-.12-.118h-1.164l.002-.012.004-.023a4.81 4.81 0 0 1 .186-.787 1.07 1.07 0 0 1 .256-.388.765.765 0 0 1 .305-.19c.115-.038.247-.056.391-.056.11 0 .218.013.3.03.112.024.156.037.186.046.119.035.135 0 .158-.057l.279-.765c.028-.082-.042-.117-.068-.127Zm-28.34 7.464c-.02-.018-.05-.047-.018-.133l.254-.705c.04-.122.133-.082.17-.058l.084.053c.037.024.077.05.129.08a3.05 3.05 0 0 0 1.66.478c.561 0 .909-.297.909-.697v-.021c0-.436-.534-.6-1.153-.791h-.002l-.137-.043c-.852-.243-1.76-.593-1.76-1.67v-.021c0-1.022.823-1.735 2.003-1.735h.13c.692 0 1.362.2 1.847.495.043.027.086.077.062.146a97.47 97.47 0 0 1-.262.705c-.046.121-.17.04-.17.04a3.718 3.718 0 0 0-1.64-.419c-.499 0-.821.265-.821.625v.023c0 .42.551.6 1.19.807l.111.036c.848.268 1.752.639 1.752 1.66v.021c0 1.104-.801 1.79-2.09 1.79-.634 0-1.239-.1-1.88-.44a8.101 8.101 0 0 0-.076-.042c-.095-.053-.19-.106-.283-.174l-.003-.003-.002-.003-.005-.004Zm18.877 0c-.019-.018-.05-.047-.017-.133l.254-.705c.037-.116.147-.074.17-.058l.043.027c.05.033.098.065.17.106a3.05 3.05 0 0 0 1.66.478c.56 0 .91-.297.91-.697v-.021c0-.436-.535-.6-1.154-.79l-.14-.044c-.852-.243-1.76-.593-1.76-1.67v-.021c0-1.022.823-1.735 2.004-1.735h.129c.693 0 1.363.2 1.847.495.044.027.087.077.063.146l-.263.705c-.045.121-.17.04-.17.04a3.718 3.718 0 0 0-1.639-.419c-.5 0-.822.265-.822.625v.023c0 .42.552.6 1.19.807l.111.036c.849.268 1.752.639 1.752 1.66v.021c0 1.104-.8 1.79-2.09 1.79-.633 0-1.238-.1-1.88-.44a9.636 9.636 0 0 0-.075-.042 2.675 2.675 0 0 1-.294-.184Zm13.945-3.452a2.59 2.59 0 0 0-.49-.935 2.367 2.367 0 0 0-.826-.629 2.718 2.718 0 0 0-1.153-.23 2.72 2.72 0 0 0-1.155.23 2.38 2.38 0 0 0-.827.629 2.632 2.632 0 0 0-.49.935 4.092 4.092 0 0 0-.157 1.157c0 .412.053.802.157 1.157a2.6 2.6 0 0 0 .491.934c.22.264.498.474.826.624.33.15.718.225 1.155.225.436 0 .824-.076 1.153-.225.329-.15.607-.36.827-.624a2.59 2.59 0 0 0 .49-.934 4.09 4.09 0 0 0 .158-1.157 4.05 4.05 0 0 0-.159-1.157Zm8.703 2.899s.1-.04.137.065l.264.73c.034.09-.044.128-.044.128a4.38 4.38 0 0 1-1.524.272c-.933 0-1.649-.269-2.125-.8-.476-.527-.717-1.25-.717-2.142 0-.413.06-.803.176-1.159a2.67 2.67 0 0 1 .524-.935c.23-.263.523-.474.867-.627a2.928 2.928 0 0 1 1.2-.231c.302 0 .574.018.807.054.25.038.579.127.718.181.026.01.095.045.067.126-.068.196-.123.345-.18.502l-.038.105-.046.13c-.04.11-.126.074-.126.074a3.576 3.576 0 0 0-1.137-.163c-.533 0-.932.178-1.195.525-.264.35-.41.808-.413 1.418-.001.67.165 1.165.463 1.471.296.306.71.461 1.23.461.213 0 .411-.014.591-.042a2.41 2.41 0 0 0 .5-.143Zm5.644-3.102a2.263 2.263 0 0 0-.466-.853c-.235-.252-.464-.429-.692-.527a2.664 2.664 0 0 0-1.044-.212c-.455 0-.867.077-1.202.234a2.393 2.393 0 0 0-.84.64 2.626 2.626 0 0 0-.493.946c-.107.36-.16.75-.16 1.163 0 .42.055.812.166 1.163.11.355.288.668.528.926.239.261.547.465.916.608.366.141.811.215 1.322.214 1.053-.004 1.607-.239 1.835-.365.04-.022.08-.062.03-.175l-.237-.667c-.036-.099-.137-.062-.137-.062l-.028.01-.027.01-.017.007c-.258.098-.635.243-1.424.241-.565 0-.984-.167-1.246-.428-.27-.267-.402-.659-.425-1.212l3.644.003s.096-.001.105-.095l.003-.016a3.912 3.912 0 0 0-.11-1.553Zm-29.647-.853c.149.16.374.508.466.853a3.9 3.9 0 0 1 .111 1.553l-.002.017c-.01.093-.106.094-.106.094l-3.643-.003c.023.553.154.945.424 1.212.262.26.681.427 1.246.428.79.002 1.167-.143 1.424-.241l.034-.013.038-.014s.101-.037.138.062l.237.667c.049.113.01.153-.03.175-.229.126-.783.361-1.835.365-.511 0-.956-.073-1.323-.214a2.393 2.393 0 0 1-.916-.608 2.406 2.406 0 0 1-.528-.925 3.898 3.898 0 0 1-.166-1.164c0-.413.055-.804.16-1.163.106-.36.273-.679.494-.946.221-.267.503-.482.839-.64.335-.157.748-.234 1.203-.234.39 0 .746.085 1.044.212.227.098.456.275.691.527Zm-9.583 1.44a8.065 8.065 0 0 0-.569-.017c-.312 0-.614.04-.897.116a2.34 2.34 0 0 0-.761.353c-.221.158-.4.36-.529.6a1.77 1.77 0 0 0-.194.84c0 .323.056.603.167.832a1.5 1.5 0 0 0 .475.57c.203.148.452.256.743.321.285.066.61.099.964.099.373 0 .746-.03 1.107-.092.357-.061.796-.15.918-.178.12-.028.255-.065.255-.065.09-.022.083-.12.083-.12l-.002-3.331c0-.73-.195-1.273-.579-1.608-.382-.335-.946-.505-1.674-.505-.273 0-.712.038-.976.09 0 0-.796.155-1.123.411 0 0-.072.045-.033.145l.258.693c.032.09.12.06.12.06s.027-.012.06-.03c.7-.382 1.587-.37 1.587-.37.394 0 .697.079.9.235.2.153.3.383.3.868v.154c-.313-.045-.6-.07-.6-.07Zm29.333-2.008a.1.1 0 0 1 .055.131c-.034.1-.212.598-.274.765-.024.063-.063.106-.133.098 0 0-.21-.049-.4-.049-.133 0-.32.017-.49.069a1.118 1.118 0 0 0-.45.27c-.132.13-.24.311-.318.537-.08.228-.121.592-.121.956v2.715a.11.11 0 0 1-.11.111h-.958a.112.112 0 0 1-.11-.11v-5.435c0-.062.043-.111.104-.111h.934c.061 0 .105.049.105.11v.444c.14-.187.39-.352.616-.454.227-.102.482-.18.94-.151.238.015.548.08.61.104Zm-25.314 5.602c.061 0 .105-.049.105-.11v-7.776c0-.06-.044-.11-.105-.11h-.966c-.06 0-.104.05-.104.11v7.776c0 .061.043.11.104.11h.966Z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 151 57" aria-label="Microsoft"><path d="m53.302 30.452-.893 2.53h-.075a17.98 17.98 0 0 0-.868-2.48L46.678 18.47H41.99v19.175h3.1V25.813c0-.744 0-1.588-.024-2.63-.025-.52-.074-.918-.1-1.215h.075a11.6 11.6 0 0 0 .447 1.637l5.755 13.99h2.183l5.705-14.114c.124-.322.248-.967.372-1.513h.075a178.288 178.288 0 0 0-.15 3.448V37.57h3.3V18.42h-4.515l-4.911 12.03Zm12.552-6.624h3.225v13.743h-3.225V23.828Zm1.637-5.804c-.546 0-.992.198-1.364.545a1.76 1.76 0 0 0-.57 1.34c0 .52.197.967.57 1.315.372.347.818.52 1.364.52.546 0 1.017-.198 1.364-.52.372-.348.57-.794.57-1.315 0-.521-.198-.967-.57-1.34-.322-.347-.794-.545-1.364-.545Zm13.023 5.68a8.998 8.998 0 0 0-1.81-.198c-1.464 0-2.804.322-3.92.967s-2.01 1.538-2.58 2.655c-.595 1.14-.893 2.455-.893 3.968 0 1.315.298 2.481.868 3.548.57 1.042 1.365 1.885 2.431 2.456 1.017.57 2.208.868 3.548.868 1.538 0 2.852-.323 3.894-.918l.025-.025v-2.977l-.124.1a5.544 5.544 0 0 1-1.563.818c-.57.199-1.091.298-1.538.298-1.29 0-2.307-.372-3.026-1.19-.744-.794-1.116-1.886-1.116-3.25 0-1.414.372-2.53 1.14-3.35.77-.818 1.787-1.24 3.027-1.24 1.042 0 2.109.348 3.076 1.042l.124.1v-3.15l-.025-.026c-.422-.173-.893-.372-1.538-.496Zm10.642-.099c-.794 0-1.538.248-2.183.77-.546.446-.918 1.09-1.24 1.86h-.025v-2.407h-3.225v13.743h3.225v-7.02c0-1.19.248-2.183.794-2.902.546-.745 1.24-1.117 2.084-1.117.297 0 .595.075.967.124.347.1.595.199.769.323l.124.099v-3.225l-.074-.025c-.224-.148-.67-.223-1.216-.223Zm8.781-.074c-2.257 0-4.068.67-5.333 1.984-1.29 1.315-1.91 3.126-1.91 5.408 0 2.133.645 3.87 1.885 5.135 1.24 1.24 2.927 1.885 5.036 1.885 2.208 0 3.969-.67 5.234-2.01 1.29-1.339 1.91-3.125 1.91-5.333 0-2.183-.595-3.919-1.811-5.184-1.166-1.265-2.877-1.885-5.01-1.885Zm2.58 10.567c-.595.77-1.538 1.141-2.704 1.141-1.166 0-2.108-.372-2.778-1.19-.67-.77-.992-1.886-.992-3.3 0-1.463.347-2.58.992-3.373.67-.794 1.588-1.191 2.754-1.191 1.141 0 2.034.372 2.679 1.141s.992 1.885.992 3.349c-.05 1.488-.323 2.654-.943 3.423Zm11.436-4.564c-1.017-.422-1.662-.744-1.96-1.017-.248-.248-.372-.596-.372-1.042 0-.372.149-.744.521-.992s.794-.373 1.414-.373c.546 0 1.116.1 1.662.249.546.148 1.042.372 1.439.67l.124.099V24.1l-.075-.025a8.95 8.95 0 0 0-1.463-.421 9.943 9.943 0 0 0-1.588-.15c-1.538 0-2.803.373-3.795 1.192-.992.768-1.464 1.81-1.464 3.026 0 .645.1 1.215.323 1.687.223.471.546.918.992 1.29.447.347 1.092.744 1.985 1.116.744.322 1.314.57 1.662.769.347.198.57.422.744.595.124.199.198.447.198.77 0 .917-.694 1.364-2.108 1.364-.546 0-1.117-.1-1.786-.323a6.898 6.898 0 0 1-1.811-.918l-.124-.099v3.15l.074.025c.472.224 1.042.372 1.737.546.694.124 1.314.223 1.86.223 1.662 0 3.026-.372 3.994-1.19.992-.794 1.513-1.811 1.513-3.126 0-.918-.248-1.736-.794-2.357a10.048 10.048 0 0 0-2.902-1.711Zm12.205-6.003c-2.258 0-4.069.67-5.334 1.984-1.265 1.315-1.91 3.126-1.91 5.408 0 2.133.645 3.87 1.885 5.135 1.241 1.24 2.928 1.885 5.036 1.885 2.208 0 3.969-.67 5.234-2.01 1.29-1.339 1.91-3.125 1.91-5.333 0-2.183-.595-3.919-1.811-5.184-1.165-1.265-2.877-1.885-5.01-1.885Zm2.555 10.567c-.596.77-1.538 1.141-2.704 1.141-1.191 0-2.109-.372-2.779-1.19-.669-.77-.992-1.886-.992-3.3 0-1.463.348-2.58.992-3.373.67-.794 1.588-1.191 2.754-1.191 1.116 0 2.034.372 2.679 1.141s.992 1.885.992 3.349c0 1.488-.322 2.654-.942 3.423Zm21.507-7.615v-2.655h-3.25V19.76l-.099.025-3.076.918-.075.025v3.1h-4.862v-1.736c0-.794.199-1.414.546-1.811.347-.397.868-.595 1.513-.595.447 0 .918.099 1.439.322l.124.075V17.28l-.074-.025c-.447-.15-1.042-.248-1.811-.248a5.81 5.81 0 0 0-2.58.595 4.298 4.298 0 0 0-1.761 1.761c-.422.744-.645 1.588-.645 2.555v1.91h-2.258v2.63h2.258V37.57h3.249V26.483h4.862v7.07c0 2.902 1.365 4.365 4.093 4.365.447 0 .918-.074 1.365-.149.471-.099.818-.223 1.017-.322l.025-.025v-2.654l-.124.1a2.103 2.103 0 0 1-.67.297 2.288 2.288 0 0 1-.645.099c-.645 0-1.092-.149-1.414-.52-.298-.348-.447-.919-.447-1.762v-6.5h3.3ZM.415 12.02H15.62v15.207H.415V12.021Zm16.794 0h15.206v15.207H17.21V12.021ZM.415 28.814H15.62v15.207H.415V28.814Zm16.794 0h15.206v15.207H17.21V28.814Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 100 57" aria-label="Disney"><path d="M40.792 16.699s.368-.574.696-1.024c.573-.778 1.638-1.883 2.416-2.58.245-.204.532-.45.532-.45s-.45.041-.696.082c-.614.123-1.474.696-1.924 1.065-.737.614-1.515 1.637-1.188 2.538.082.205.164.369.164.369Zm4.053 1.105a7.625 7.625 0 0 0 3.235-.983c.982-.532 2.415-1.637 2.293-2.907a1.044 1.044 0 0 0-.656-.86c-.45-.204-.655-.163-1.228 0-.41.124-.573.205-.982.41-1.147.655-2.744 2.047-3.603 3.194-.205.245-.41.573-.574.777-.122.123-.163.246-.163.287.04.123 1.228.123 1.678.082Zm-2.907 2.129c-.122.123-.245.41-.368.655-.082.123-.205.287-.287.328-.286.204-.532.245-.86-.041a1.963 1.963 0 0 1-.654-1.433c0-.246.04-.492 0-.696-.082-.328-.41-.696-.574-.983-.204-.368-.368-1.024-.41-1.474-.081-1.31.615-2.538 1.516-3.52.9-.983 2.129-1.802 3.398-2.335 1.228-.532 3.03-.86 4.38-.409.451.164 1.065.532 1.352.9.082.083.123.164.205.205.04.041.204.041.327.082.45.082 1.065.41 1.31.614.491.45.778.86.9 1.474.247 1.229-.45 2.58-1.268 3.399-1.392 1.392-2.743 2.415-4.504 3.07-.778.287-1.965.573-2.866.492-.286-.041-.573-.082-.819-.123-.123 0-.614-.123-.696-.164l-.082-.041Zm1.556 2.743c.041 0 .123.041.205.041.614.246.86.819 1.023 1.433.369 1.474.492 4.667.574 5.937.04.941.081 1.883.123 2.824.04.778.081 1.843-.082 2.58-.041.286-.246.573-.492.737-.286.204-.941.204-1.31.123-.9-.205-1.187-.778-1.31-1.679-.287-2.129-.164-6.305.04-8.065.042-.574.288-2.457.574-3.235.041-.246.287-.778.655-.696Zm-27.84 3.194s-1.351.081-2.252.204c-1.188.123-3.357.491-4.627.942-.368.123-1.146.45-1.228.86-.082.41.164.737.45 1.064.164.205 1.065 1.065 1.351 1.27 1.065.9 3.276 2.292 4.873 2.947.532.246 1.473.573 1.473.573s-.081-2.62-.04-5.158c-.041-1.351 0-2.703 0-2.703Zm24.524 1.023c.082.696-.123 2.006-.123 2.21-.04.41-.368 1.311-.41 1.434-.245.573-.49 1.023-.736 1.474-.45.778-1.474 2.047-2.088 2.58-2.293 2.005-5.855 3.11-8.926 3.48-2.088.245-4.462.204-6.673-.206a31.02 31.02 0 0 1-1.884-.409s0 .45-.04.778c0 .123-.123.532-.205.655-.164.328-.41.491-.82.573-.45.082-.94.123-1.391-.082-.696-.286-.942-.941-1.065-1.72-.082-.613-.204-1.637-.204-1.637s-.533-.246-.942-.45c-1.351-.655-2.62-1.474-3.726-2.293-.327-.246-1.637-1.351-1.924-1.597-.819-.778-1.556-1.556-2.13-2.538-.45-.778-.572-1.474-.245-2.293.45-1.146 2.088-2.006 3.235-2.497.819-.369 3.398-1.188 4.462-1.351.492-.082 1.27-.205 1.351-.246l.041-.041c.041-.041.082-1.187.041-1.597 0-.41.287-3.07.41-3.644.04-.327.286-1.473.532-1.801.164-.205.41-.205.655-.04 1.228.777 1.597 3.397 1.679 4.748.04.82.082 2.047.082 2.047s1.392-.04 2.252 0c.818.041 1.76.164 2.62.287 1.105.164 3.275.655 4.544 1.27 1.024.531 1.966 1.391 2.293 2.333.287.86.246 1.433-.205 2.21-.49.86-1.433 1.516-2.374 1.556-.287 0-1.351-.122-1.679-.368a.315.315 0 0 1-.04-.41c.04-.04.531-.286.818-.45.164-.082.287-.163.369-.286.245-.205.45-.45.45-.737-.041-.369-.41-.573-.778-.737-1.72-.655-5.077-1.229-6.756-1.351-.655-.041-1.555-.082-1.555-.082l.286 9.13s.737.164 1.351.245c.328.041 1.802.164 2.17.205 2.948.082 6.183-.164 8.885-1.474 1.187-.573 2.252-1.228 3.07-2.17 1.065-1.228 1.638-2.947 1.515-4.708-.163-1.924-1.515-4.217-2.62-5.609-2.866-3.685-7.779-6.714-12.119-8.516-4.422-1.801-8.802-2.866-13.47-3.03-1.228-.04-3.848 0-5.159.369-.204.04-.368.123-.573.164-.123.04-.368.122-.41.163l-.081.082.164.082c.123.082.737.082 1.023.164.287.04.573.205.655.41.123.204.123.327 0 .49-.286.37-1.433.287-1.924.246-.532-.082-1.146-.245-1.27-.696-.122-.532.124-1.064.37-1.555.532-.983 1.35-1.474 2.497-1.802 1.637-.45 3.685-.778 5.24-.819 3.521-.123 6.797.492 10.195 1.515 1.924.573 4.504 1.556 6.346 2.457a50.267 50.267 0 0 1 4.626 2.62c.369.246 2.539 1.842 2.907 2.129.696.573 1.638 1.392 2.293 2.088 1.31 1.27 2.907 3.234 3.685 4.79.205.369.328.737.573 1.187.082.164.45 1.024.491 1.31.041.246.164.615.164.656.041.04.205.819.205 1.105Zm15.067.655h.122c1.065.164 2.13.328 2.907.696.737.328 1.188.737 1.597 1.474.614 1.146.655 2.702.082 3.89-.41.9-1.31 1.637-2.13 2.047-.859.409-1.678.614-2.66.736-1.679.205-3.521-.163-5.036-.9-.9-.45-2.006-1.188-2.539-2.17-.409-.696-.409-1.638.082-2.334.778-1.064 2.457-1.31 3.767-1.269.983.041 2.702.328 3.644.655.245.082 1.187.45 1.35.614.124.123.206.287.124.45-.205.656-1.76.983-2.211 1.065-1.228.205-1.843-.287-3.194-.819-.327-.123-.777-.286-1.146-.327-.614-.041-1.392.122-1.474.778-.04.368.369.696.655.818.737.328 1.351.45 2.047.45 2.13.042 4.545-.327 6.305-1.555.246-.164.492-.41.492-.737 0-.04-.041-.368-.164-.41h-.041c-.041 0-.123-.122-.164-.204-.123-.164-.614-.369-.737-.41-1.187-.49-3.357-.736-4.503-.818-1.188-.082-3.03-.246-3.48-.328-.45-.082-.942-.164-1.352-.327a1.608 1.608 0 0 1-.9-1.024c-.205-.819.04-1.801.491-2.415 1.187-1.68 3.93-2.334 5.977-2.58 1.966-.245 5.2-.245 7.125.778.286.164.45.328.409.614-.123.614-.573.983-1.146 1.147-.574.163-1.761.245-2.293.286-2.334.123-5.2.082-7.41.655-.165.041-.492.123-.574.246-.368.368.655.491.86.532.082 0 .082 0 .123.041l4.995.655Zm7.328 8.803c-.941-.369-1.146-1.884-1.187-2.662-.164-2.538.532-6.018 1.351-8.393.246-.655.573-1.76 1.351-1.72.532.042.9.451 1.187.86.737 1.065 1.72 2.457 2.375 3.44.737 1.105 1.433 2.21 2.088 3.234.082.123.164.246.246.328.123.082.245.122.286 0 .041-.041-.04-1.31-.04-1.556-.041-.41-.083-.737-.123-1.106-.123-1.023-.45-2.456-.696-3.439-.287-1.064-.615-2.21-.86-3.275-.082-.328-.164-.696-.164-1.024 0-.45.287-.737.778-.573.982.328 2.252 2.416 2.62 3.153.123.245.614 1.474.737 1.842.41 1.187.655 2.334.737 3.644.123 1.27 0 3.111-.532 4.38-.205.451-.614 1.065-.942 1.393-.532.491-1.596.86-2.292.45-.778-.45-2.089-2.702-2.334-3.111-.737-1.31-2.047-3.89-2.252-4.177-.041-.082-.082-.122-.205-.163-.082-.041-.123.122-.123.245-.122.737-.204 4.258-.204 4.381-.041.573-.041 2.047-.205 2.743-.123.45-.205.86-.655 1.065-.328.245-.573.163-.942.04Zm13.102-.246a1.574 1.574 0 0 1-.369-.368s-.368-.533-.41-.697c-.04-.122-.122-.245-.163-.327-.328-.819-.287-1.597-.123-2.457.164-.818.328-.818.737-1.924.041-.04.041-.123.041-.164 0-.163-.246-1.187-.246-1.473 0-.492.369-.86 1.024-.901h.164c.245-.082.41-.573.573-.942.205-.573.491-1.392.491-1.392s-.819-.205-1.269-.368c-.491-.205-.86-.41-1.064-.86-.246-.532-.082-.819.45-.983.205-.082 1.801-.368 2.293-.45.614-.082 1.228-.164 1.801-.246.532-.082 2.907-.327 3.644-.327 1.146.04 1.883.491 2.58 1.474.368.532.614 1.146.081 1.474-.86.49-3.562.532-4.053.573h-1.883l-.574 1.842s1.966-.04 3.03-.04c.287 0 .532 0 .696.04.573.123.737.573.778 1.187.041.737-.123 1.065-.696 1.147-.287.04-3.644.082-4.094.123l-.573.081s-.246.615-.45 1.27c-.205.655-.41 1.35-.41 1.35h.327c.246 0 .492-.04.656-.081 1.023-.205 2.538-.41 3.807-.614.655-.123 1.024-.164 1.351.286.287.41.45.737.492 1.188 0 .45-.328.737-.737 1.064-1.31 1.024-3.562 2.088-5.241 2.293-.778.082-.983 0-1.638-.164-.123-.04-.614-.246-.614-.287-.082-.081-.327-.245-.41-.327Zm21.167-9.294c-.86.737-1.965 2.211-2.498 2.948-.696 1.023-1.392 2.17-2.006 3.07-.123.205-.532.942-.532.942.04.041.45.041.86-.04.9-.165 2.129-.779 2.825-1.31a5.941 5.941 0 0 0 2.047-3.194c.164-.573.205-1.843-.205-2.375-.123-.082-.327-.164-.491-.04Zm-6.879 10.604s-.286.819-.49 1.433c-.328 1.105-1.106 4.012-1.27 4.913-.246 1.351-1.024 4.872-1.065 4.954-.04.123-.081.123-.204.205-.328.163-.45.122-.819-.082-.491-.246-.9-.532-1.27-1.024-.736-.941-.572-2.743-.409-3.807.492-3.685 1.024-5.323 2.416-9.008.04-.081.04-.081 0-.122-.45-.942-.655-2.047-.655-2.99 0-2.906 1.678-5.73 3.52-8.024.124-.163 1.065-1.269 1.475-1.228.41 0 .491.491.41.9-.206 1.352-1.147 2.703-1.802 3.808-.737 1.27-.86 1.76-1.228 2.907-.041.164-.205 1.024-.205 1.147 0 .327.082.696.082.696s1.187-1.638 1.965-2.662c.41-.573.737-.941 1.064-1.31.369-.41 1.72-1.842 2.13-2.21.818-.778 1.187-1.106 2.087-1.597.696-.369 1.352-.45 2.048 0 1.105.737 1.596 2.252 1.72 3.48.163 1.474-.165 3.152-.82 4.421-.778 1.515-1.842 2.62-3.275 3.562-1.474.983-3.194 1.638-4.913 1.597-.205.041-.492.041-.492.041Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 103 57" aria-label="Amazon"><g clip-path="url(#Amazon_svg__a)"><path d="M63.414 41.166c-5.897 4.347-14.445 6.666-21.805 6.666-10.319 0-19.609-3.817-26.637-10.165-.552-.5-.057-1.18.605-.79 7.585 4.412 16.963 7.067 26.65 7.067 6.534 0 13.722-1.352 20.33-4.157.998-.424 1.833.654.857 1.379Z"></path><path d="M65.866 38.36c-.75-.962-4.983-.454-6.882-.229-.579.07-.667-.433-.146-.795 3.37-2.372 8.901-1.688 9.546-.892.645.8-.168 6.343-3.335 8.99-.486.406-.95.19-.733-.35.71-1.776 2.305-5.756 1.55-6.723Zm-6.75-17.77v-2.307c0-.349.265-.583.583-.583h10.324c.331 0 .597.239.597.583v1.975c-.005.331-.283.764-.778 1.449l-5.35 7.638c1.988-.049 4.087.247 5.889 1.263.406.23.517.566.548.897v2.46c0 .336-.371.73-.76.526-3.176-1.665-7.395-1.846-10.907.018-.358.194-.733-.195-.733-.53v-2.337c0-.376.004-1.016.38-1.586l6.197-8.888h-5.393c-.332 0-.597-.234-.597-.579ZM21.457 34.977h-3.14a.593.593 0 0 1-.562-.534v-16.12a.59.59 0 0 1 .606-.579h2.928a.592.592 0 0 1 .57.54v2.107h.058c.764-2.037 2.2-2.987 4.134-2.987 1.966 0 3.194.95 4.078 2.986.76-2.036 2.487-2.986 4.338-2.986 1.316 0 2.756.544 3.635 1.763.994 1.356.791 3.326.791 5.053l-.004 10.174c0 .322-.27.583-.606.583h-3.136a.597.597 0 0 1-.565-.583v-8.543c0-.68.061-2.377-.089-3.022-.234-1.082-.936-1.387-1.846-1.387-.76 0-1.555.508-1.878 1.32-.322.814-.291 2.174-.291 3.088v8.544c0 .322-.27.583-.606.583h-3.136a.594.594 0 0 1-.565-.583l-.005-8.543c0-1.798.296-4.444-1.935-4.444-2.257 0-2.169 2.58-2.169 4.444v8.543a.593.593 0 0 1-.605.583Zm58.05-17.573c4.66 0 7.183 4.003 7.183 9.091 0 4.917-2.788 8.818-7.183 8.818-4.577 0-7.068-4.002-7.068-8.99 0-5.018 2.522-8.919 7.068-8.919Zm.026 3.291c-2.314 0-2.46 3.154-2.46 5.12 0 1.97-.031 6.176 2.434 6.176 2.434 0 2.549-3.393 2.549-5.46 0-1.36-.058-2.986-.468-4.276-.354-1.122-1.056-1.56-2.054-1.56ZM9.711 27.277v-.68c-2.27 0-4.67.486-4.67 3.163 0 1.356.703 2.275 1.91 2.275.883 0 1.673-.543 2.173-1.427.618-1.087.587-2.107.587-3.33Zm3.168 7.656a.656.656 0 0 1-.743.075c-1.042-.866-1.228-1.268-1.802-2.094-1.723 1.758-2.942 2.284-5.177 2.284-2.642 0-4.7-1.63-4.7-4.895 0-2.549 1.382-4.285 3.348-5.133 1.705-.75 4.086-.883 5.906-1.091v-.407c0-.746.058-1.63-.38-2.274-.384-.58-1.117-.818-1.762-.818-1.197 0-2.266.614-2.527 1.887-.053.282-.26.56-.543.574l-3.049-.327c-.256-.057-.538-.265-.468-.658.703-3.693 4.038-4.806 7.024-4.806 1.528 0 3.525.406 4.731 1.563 1.529 1.427 1.383 3.331 1.383 5.403v4.894c0 1.471.61 2.116 1.184 2.912.203.282.247.623-.01.834a133.4 133.4 0 0 0-2.407 2.086l-.008-.01Zm79.854.044h-3.127a.597.597 0 0 1-.566-.583l-.004-16.124a.594.594 0 0 1 .605-.526h2.911c.274.014.5.2.561.451v2.465h.057c.88-2.204 2.112-3.256 4.281-3.256 1.41 0 2.783.508 3.666 1.9.822 1.29.822 3.459.822 5.018V34.47c-.035.283-.296.508-.605.508h-3.15c-.287-.022-.525-.234-.556-.508v-8.755c0-1.763.203-4.343-1.966-4.343-.764 0-1.467.513-1.816 1.29-.442.985-.499 1.966-.499 3.053v8.68a.604.604 0 0 1-.614.583Zm-42.307-7.7v-.68c-2.27 0-4.67.486-4.67 3.163 0 1.356.703 2.275 1.91 2.275.883 0 1.673-.543 2.173-1.427.618-1.087.587-2.107.587-3.33Zm3.167 7.656a.656.656 0 0 1-.742.075c-1.042-.866-1.228-1.268-1.802-2.094-1.723 1.758-2.942 2.284-5.177 2.284-2.642 0-4.7-1.63-4.7-4.895 0-2.549 1.382-4.285 3.348-5.133 1.705-.75 4.086-.883 5.906-1.091v-.407c0-.746.057-1.63-.38-2.274-.384-.58-1.117-.818-1.763-.818-1.197 0-2.266.614-2.526 1.887-.053.282-.26.56-.544.574l-3.048-.327c-.256-.057-.539-.265-.468-.658.702-3.693 4.038-4.806 7.024-4.806 1.528 0 3.525.406 4.731 1.563 1.528 1.427 1.383 3.331 1.383 5.403v4.894c0 1.471.61 2.117 1.184 2.912.203.282.247.623-.01.834a133.4 133.4 0 0 0-2.407 2.086l-.009-.01Z"></path></g><defs><clipPath id="Amazon_svg__a"><path d="M0 0h102v39H0z" transform="translate(.198 8.52)"></path></clipPath></defs></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 99 57" aria-label="Neftlix"><path fill-rule="evenodd" d="M14.037 39.775c-.875.155-1.756.246-2.654.339-.622.064-1.251.129-1.892.217L4.743 26.197v14.738c-1.343.141-2.569.33-3.825.522l-.414.064v-27h3.94l5.412 15.314V14.521h4.181v25.254Zm11.077-15.413c.982-.02 1.943-.038 2.667-.038v4.224c-1.845 0-4.008 0-5.565.078v6.272c.725-.047 1.45-.098 2.175-.15 1.718-.122 3.44-.244 5.178-.299v4.068l-11.505.926V14.521h11.505v4.214h-7.343v5.667c.823 0 1.867-.02 2.888-.04Zm15.604-5.618h4.306l.01-.01v-4.213H32.25v4.214h4.306v19.45c1.356-.059 2.759-.059 4.162-.059V18.744Zm11.063 5.366h5.689v4.223h-5.69v9.57h-4.084V14.52h11.61v4.214H51.77v5.384l.01-.01Zm19.64 10.38c-1.773-.113-3.579-.228-5.368-.265V14.52h-4.152v23.684c3.786.078 7.506.312 11.217.556v-4.166c-.562-.033-1.128-.069-1.697-.105Zm5.204 4.553c1.327.078 2.73.166 4.076.322V14.521h-4.076v24.522Zm17.023-11.685 5.277-12.837h-4.547l-2.92 7.091-2.72-7.091h-4.461l4.825 12.68-5.343 12.36c.635.09 1.263.157 1.891.223.854.09 1.708.18 2.578.332l3.037-7.17 2.989 7.804.525.093c1.382.243 2.764.486 4.146.668l-5.276-14.153Z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 46 57" aria-label="Adobe"><path d="M16.726 8.02H0v40l16.726-40Zm11.768 0h16.703v40l-16.704-40ZM22.61 22.763l10.645 25.258h-6.984l-3.182-8.042H15.3l7.31-17.216Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 64 57" aria-label="Salesforce"><path d="M41.087 26.676c0 .624-.116 1.115-.346 1.463-.226.344-.569.511-1.047.511-.48 0-.82-.166-1.043-.511-.226-.347-.34-.84-.34-1.463 0-.624.114-1.114.34-1.458.222-.34.564-.506 1.043-.506.478 0 .82.166 1.048.506.229.344.345.834.345 1.458Zm11.799-.598c.051-.347.147-.635.295-.86.223-.341.563-.528 1.041-.528s.794.188 1.021.528c.15.225.216.526.242.86h-2.599ZM24 25.218c-.148.225-.242.513-.294.86h2.598c-.026-.334-.091-.635-.24-.86-.228-.34-.544-.528-1.022-.528-.479 0-.819.187-1.042.528Zm-8.17 3.245c-.142-.113-.162-.142-.21-.215-.072-.112-.109-.272-.109-.474 0-.32.106-.55.325-.706-.002.001.314-.273 1.057-.263.522.007.989.084.989.084v1.657s-.462.1-.984.13c-.741.045-1.07-.213-1.068-.212Z"></path><path fill-rule="evenodd" d="M34.35 7.397c-3.122 0-5.945 1.31-7.972 3.423a12.194 12.194 0 0 0-9.708-4.8c-6.743 0-12.21 5.46-12.21 12.194 0 1.723.36 3.363 1.005 4.849A10.618 10.618 0 0 0 .22 32.245c0 5.855 4.697 10.601 10.492 10.601.74 0 1.46-.077 2.156-.225 1.592 4.32 5.74 7.399 10.607 7.399 4.674 0 8.683-2.839 10.405-6.887a9.904 9.904 0 0 0 12.98-4.077c.864.174 1.756.265 2.67.265 7.484 0 13.552-6.12 13.552-13.67S57.013 11.98 49.529 11.98c-1.951 0-3.806.416-5.481 1.165-1.928-3.435-5.549-5.749-9.698-5.749Zm3.331 14.11a3.142 3.142 0 0 0-.36-.086 2.86 2.86 0 0 0-.495-.037c-.659 0-1.178.186-1.543.553-.362.365-.608.921-.732 1.653l-.045.246h-.827s-.1-.003-.122.106l-.135.759c-.01.071.021.117.118.117h.805l-.817 4.56a5.644 5.644 0 0 1-.218.898c-.08.225-.158.395-.255.518a.678.678 0 0 1-.333.257c-.125.042-.27.062-.429.062a1.59 1.59 0 0 1-.291-.032.86.86 0 0 1-.198-.064s-.093-.036-.131.058c-.03.078-.245.668-.27.74-.026.073.01.13.056.147a2.23 2.23 0 0 0 .867.148c.335 0 .64-.048.894-.14.255-.091.477-.252.674-.468.212-.235.345-.48.473-.816.126-.331.234-.743.32-1.223l.821-4.645h1.2s.101.003.122-.107l.136-.757c.009-.073-.022-.118-.12-.118h-1.164l.002-.012.004-.023a4.81 4.81 0 0 1 .186-.787 1.07 1.07 0 0 1 .256-.388.765.765 0 0 1 .305-.19c.115-.038.247-.056.391-.056.11 0 .218.013.3.03.112.024.156.037.186.046.119.035.135 0 .158-.057l.279-.765c.028-.082-.042-.117-.068-.127Zm-28.34 7.464c-.02-.018-.05-.047-.018-.133l.254-.705c.04-.122.133-.082.17-.058l.084.053c.037.024.077.05.129.08a3.05 3.05 0 0 0 1.66.478c.561 0 .909-.297.909-.697v-.021c0-.436-.534-.6-1.153-.791h-.002l-.137-.043c-.852-.243-1.76-.593-1.76-1.67v-.021c0-1.022.823-1.735 2.003-1.735h.13c.692 0 1.362.2 1.847.495.043.027.086.077.062.146a97.47 97.47 0 0 1-.262.705c-.046.121-.17.04-.17.04a3.718 3.718 0 0 0-1.64-.419c-.499 0-.821.265-.821.625v.023c0 .42.551.6 1.19.807l.111.036c.848.268 1.752.639 1.752 1.66v.021c0 1.104-.801 1.79-2.09 1.79-.634 0-1.239-.1-1.88-.44a8.101 8.101 0 0 0-.076-.042c-.095-.053-.19-.106-.283-.174l-.003-.003-.002-.003-.005-.004Zm18.877 0c-.019-.018-.05-.047-.017-.133l.254-.705c.037-.116.147-.074.17-.058l.043.027c.05.033.098.065.17.106a3.05 3.05 0 0 0 1.66.478c.56 0 .91-.297.91-.697v-.021c0-.436-.535-.6-1.154-.79l-.14-.044c-.852-.243-1.76-.593-1.76-1.67v-.021c0-1.022.823-1.735 2.004-1.735h.129c.693 0 1.363.2 1.847.495.044.027.087.077.063.146l-.263.705c-.045.121-.17.04-.17.04a3.718 3.718 0 0 0-1.639-.419c-.5 0-.822.265-.822.625v.023c0 .42.552.6 1.19.807l.111.036c.849.268 1.752.639 1.752 1.66v.021c0 1.104-.8 1.79-2.09 1.79-.633 0-1.238-.1-1.88-.44a9.636 9.636 0 0 0-.075-.042 2.675 2.675 0 0 1-.294-.184Zm13.945-3.452a2.59 2.59 0 0 0-.49-.935 2.367 2.367 0 0 0-.826-.629 2.718 2.718 0 0 0-1.153-.23 2.72 2.72 0 0 0-1.155.23 2.38 2.38 0 0 0-.827.629 2.632 2.632 0 0 0-.49.935 4.092 4.092 0 0 0-.157 1.157c0 .412.053.802.157 1.157a2.6 2.6 0 0 0 .491.934c.22.264.498.474.826.624.33.15.718.225 1.155.225.436 0 .824-.076 1.153-.225.329-.15.607-.36.827-.624a2.59 2.59 0 0 0 .49-.934 4.09 4.09 0 0 0 .158-1.157 4.05 4.05 0 0 0-.159-1.157Zm8.703 2.899s.1-.04.137.065l.264.73c.034.09-.044.128-.044.128a4.38 4.38 0 0 1-1.524.272c-.933 0-1.649-.269-2.125-.8-.476-.527-.717-1.25-.717-2.142 0-.413.06-.803.176-1.159a2.67 2.67 0 0 1 .524-.935c.23-.263.523-.474.867-.627a2.928 2.928 0 0 1 1.2-.231c.302 0 .574.018.807.054.25.038.579.127.718.181.026.01.095.045.067.126-.068.196-.123.345-.18.502l-.038.105-.046.13c-.04.11-.126.074-.126.074a3.576 3.576 0 0 0-1.137-.163c-.533 0-.932.178-1.195.525-.264.35-.41.808-.413 1.418-.001.67.165 1.165.463 1.471.296.306.71.461 1.23.461.213 0 .411-.014.591-.042a2.41 2.41 0 0 0 .5-.143Zm5.644-3.102a2.263 2.263 0 0 0-.466-.853c-.235-.252-.464-.429-.692-.527a2.664 2.664 0 0 0-1.044-.212c-.455 0-.867.077-1.202.234a2.393 2.393 0 0 0-.84.64 2.626 2.626 0 0 0-.493.946c-.107.36-.16.75-.16 1.163 0 .42.055.812.166 1.163.11.355.288.668.528.926.239.261.547.465.916.608.366.141.811.215 1.322.214 1.053-.004 1.607-.239 1.835-.365.04-.022.08-.062.03-.175l-.237-.667c-.036-.099-.137-.062-.137-.062l-.028.01-.027.01-.017.007c-.258.098-.635.243-1.424.241-.565 0-.984-.167-1.246-.428-.27-.267-.402-.659-.425-1.212l3.644.003s.096-.001.105-.095l.003-.016a3.912 3.912 0 0 0-.11-1.553Zm-29.647-.853c.149.16.374.508.466.853a3.9 3.9 0 0 1 .111 1.553l-.002.017c-.01.093-.106.094-.106.094l-3.643-.003c.023.553.154.945.424 1.212.262.26.681.427 1.246.428.79.002 1.167-.143 1.424-.241l.034-.013.038-.014s.101-.037.138.062l.237.667c.049.113.01.153-.03.175-.229.126-.783.361-1.835.365-.511 0-.956-.073-1.323-.214a2.393 2.393 0 0 1-.916-.608 2.406 2.406 0 0 1-.528-.925 3.898 3.898 0 0 1-.166-1.164c0-.413.055-.804.16-1.163.106-.36.273-.679.494-.946.221-.267.503-.482.839-.64.335-.157.748-.234 1.203-.234.39 0 .746.085 1.044.212.227.098.456.275.691.527Zm-9.583 1.44a8.065 8.065 0 0 0-.569-.017c-.312 0-.614.04-.897.116a2.34 2.34 0 0 0-.761.353c-.221.158-.4.36-.529.6a1.77 1.77 0 0 0-.194.84c0 .323.056.603.167.832a1.5 1.5 0 0 0 .475.57c.203.148.452.256.743.321.285.066.61.099.964.099.373 0 .746-.03 1.107-.092.357-.061.796-.15.918-.178.12-.028.255-.065.255-.065.09-.022.083-.12.083-.12l-.002-3.331c0-.73-.195-1.273-.579-1.608-.382-.335-.946-.505-1.674-.505-.273 0-.712.038-.976.09 0 0-.796.155-1.123.411 0 0-.072.045-.033.145l.258.693c.032.09.12.06.12.06s.027-.012.06-.03c.7-.382 1.587-.37 1.587-.37.394 0 .697.079.9.235.2.153.3.383.3.868v.154c-.313-.045-.6-.07-.6-.07Zm29.333-2.008a.1.1 0 0 1 .055.131c-.034.1-.212.598-.274.765-.024.063-.063.106-.133.098 0 0-.21-.049-.4-.049-.133 0-.32.017-.49.069a1.118 1.118 0 0 0-.45.27c-.132.13-.24.311-.318.537-.08.228-.121.592-.121.956v2.715a.11.11 0 0 1-.11.111h-.958a.112.112 0 0 1-.11-.11v-5.435c0-.062.043-.111.104-.111h.934c.061 0 .105.049.105.11v.444c.14-.187.39-.352.616-.454.227-.102.482-.18.94-.151.238.015.548.08.61.104Zm-25.314 5.602c.061 0 .105-.049.105-.11v-7.776c0-.06-.044-.11-.105-.11h-.966c-.06 0-.104.05-.104.11v7.776c0 .061.043.11.104.11h.966Z" clip-rule="evenodd"></path></svg></div></div></div></div><div class="scroll-section_scrollSection__sfz4L" data-scrollsection="container"><div class="container-two-column_containerTwoColumns__BHIh5 container-two-column_breakAbove_md__eTuFf mbe-128 md-mbe-192 YttEe7kIjjIAtcbhghld BNiOPRzcZXhZrycvcnLa"><div class="md-pbs-96"><div class=""><div class="container-two-column_textContainerInner__zC5fl container-two-column_lg__QePrC"><div class="product-scenes-section_sceneContainer__jQq3k"><div class="product-scenes-section_fullHeight__8_Ujr"><div class=""><div class=""><p class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA product-scenes-section_preheader__DUAuK mbe-24">Clear your mind</p><h2 class="Z2j5FoeQ_umI7vX0SmxF liIOVrso64nx4V5gWj4A mWJbs2TuAw9nS7uYCe19 mbe-24">The fastest way to get tasks out of your head.</h2><p class="Z2j5FoeQ_umI7vX0SmxF VB6LgUAmqv1DrUQhn1Tq product-scenes-section_description__sW_Mc">Type just about anything into the task field and Todoist’s one-of-its-kind natural language recognition will instantly fill your to-do list.</p></div><div class="ALjV_FDtdiJ2rGCAH1Lg OuHDHN6jISIW7I2iDwgs"><div class="mbs-32"><div class="product-ui-context_container__G4mMi"><div class=""><div class=""><div class=""><div class="product-ui-frame_productFrame__napMY product-ui-frame_productUIFrame__e7Ykc" aria-hidden="true"><div class="quick-add-sequence_sequenceContainer__mbCx7"><div class="product-ui-frame-background_framebackground__ykUlp quick-add-sequence_frameBackground__TuGRX product-ui-frame-background_antique__PoHwY"><img alt="" loading="lazy" width="590" height="472" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 590px) 100vw, 590px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0"/></div><div class="product-ui-overlay_overlay__p3EBz quick-add-sequence_overlay__O3SGJ"><div class="product-ui-view_viewContainer__hsvg9"><div class="product-ui-view_header__Tw6qW"><div class="product-ui-view_textContainer__5o_1E"><span class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa JsQfzfVodByEpTHhXMTC">Today</span></div></div></div></div><div class="quick-add_quickAddContainer__jCNrC quick-add-sequence_quickAdd__HndeA" data-productui="quickadd"><div class="quick-add_details__9MGr9"><div class="quick-add_inputFields__Ejr6b"><div class="quick-add_taskContainer__YeL65"><div class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa DLF4ip7391hTQFmMhXrA"><span id="quickAddPlaceholder" class="quick-add_intentContainer__QNl8d quick-add_placeholder__da9_w" data-productui="placeholder">Task name</span> <span id="taskText" class="quick-add_intentContainer__QNl8d" data-productui="quickAddText"></span> <span id="taskTime" class="quick-add_intentContainer__QNl8d" data-productui="quickAddText"></span> <span id="taskPriority" class="quick-add_intentContainer__QNl8d" data-productui="quickAddText"></span></div></div></div><div class="quick-add_attributesContainer__PYBL9"><div class="quick-add_attributeContainer__c3TJR"><div class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ product-ui-task-attribute-pill_pill__a2pAO"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task-attribute-pill_prefixIcon__8lJjH"><path fill-rule="evenodd" clip-rule="evenodd" d="M6 8a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 8Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Zm3-1.5A1.5 1.5 0 0 0 4.5 6v12A1.5 1.5 0 0 0 6 19.5h12a1.5 1.5 0 0 0 1.5-1.5V6A1.5 1.5 0 0 0 18 4.5H6Z" fill="currentColor"></path><path d="M17.25 16.125a1.125 1.125 0 1 1-2.25 0 1.125 1.125 0 0 1 2.25 0Z" fill="currentColor"></path></svg><span>Due date</span></div><div class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ product-ui-task-attribute-pill_pill__a2pAO"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task-attribute-pill_prefixIcon__8lJjH"><path fill-rule="evenodd" clip-rule="evenodd" d="M3 4.5a.75.75 0 0 1 .415-.67C4.537 3.267 6.144 3 8.25 3c1.352 0 2.228.202 3.987.789 1.616.538 2.365.711 3.513.711 1.894 0 3.287-.232 4.165-.67A.75.75 0 0 1 21 4.5v9.75a.75.75 0 0 1-.415.671c-1.122.562-2.729.83-4.835.83-1.352 0-2.228-.203-3.987-.79-1.616-.538-2.365-.71-3.513-.71-1.619 0-2.872.169-3.75.492v5.507a.75.75 0 1 1-1.5 0V4.5Zm1.5 8.668V4.993C5.378 4.67 6.631 4.5 8.25 4.5c1.148 0 1.897.173 3.513.712 1.759.586 2.635.788 3.987.788 1.502 0 2.75-.136 3.75-.418v8.175c-.878.324-2.131.493-3.75.493-1.148 0-1.897-.173-3.513-.711-1.759-.587-2.635-.789-3.987-.789-1.502 0-2.75.136-3.75.418Z" fill="currentColor"></path></svg><span>Priority</span></div></div><div class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ product-ui-task-attribute-pill_pill__a2pAO product-ui-task-attribute-pill_overflow__m40_l"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task-attribute-pill_prefixIcon__8lJjH"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 12a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm7 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm7 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z" fill="currentColor"></path></svg></div></div></div><hr class="lKbkMAAbpfoobELp5Owc rb96v3SgFf7CAdIwrQ95" aria-orientation="horizontal"/><div class="quick-add_footer__ypzk6"><div class="quick-add_footerContainer__SCLk_"><div class="Z2j5FoeQ_umI7vX0SmxF V0mB2BLv4MZSojdU0DJU product-ui-button_button__D_P_9"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-blue)" class="product-ui-button_icon__DhFlD"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.246 4.73A2.25 2.25 0 0 1 7.435 3h9.13a2.25 2.25 0 0 1 2.189 1.73l2.226 9.346c.013.057.02.116.02.174v4.5A2.25 2.25 0 0 1 18.75 21H5.25A2.25 2.25 0 0 1 3 18.75v-4.5a.75.75 0 0 1 .02-.174L5.246 4.73Zm2.189-.23a.75.75 0 0 0-.73.577L4.5 14.338v4.412c0 .415.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-4.412l-2.205-9.261a.75.75 0 0 0-.73-.577h-9.13ZM6.25 15a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75 1.75 1.75 0 1 0 3.5 0 .75.75 0 0 1 .75-.75H17a.75.75 0 0 1 0 1.5h-1.837a3.251 3.251 0 0 1-6.326 0H7a.75.75 0 0 1-.75-.75Z" fill="currentColor"></path></svg>Inbox<svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-button_icon__DhFlD"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.873 8.873a.886.886 0 0 1 1.254 0L12 14.746l5.873-5.873a.886.886 0 1 1 1.254 1.254l-6.5 6.5a.886.886 0 0 1-1.254 0l-6.5-6.5a.886.886 0 0 1 0-1.254Z" fill="currentcolor"></path></svg></div><div class="quick-add_footerSpacer__cyK39"></div><button class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA addTaskButton" data-productui="cta">Add task</button></div></div></div><div id="productUICursor" class="product-ui-cursor_productUICursor__a3j3y" data-productui="cursor"></div></div></div></div></div></div><div class="product-ui-context_controls__mE9dh"><button class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA RRhYDjs6PL1ltbRYaang lePD3jMfxmXWJSFrwC94"><span class="rym_lVoWNxRNMkfceBG7" aria-hidden="true"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 3.743a.733.733 0 0 1 1.09-.651l7.533 4.257a.75.75 0 0 1 0 1.302L5.09 12.908a.733.733 0 0 1-1.09-.65V3.742Z" fill="currentColor"></path></svg></span>Play</button></div></div></div></div></div></div><div class="product-scenes-section_fullHeight__8_Ujr"><div class=""><div class=""><p class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA product-scenes-section_preheader__DUAuK mbe-24">Focus on what’s important</p><h2 class="Z2j5FoeQ_umI7vX0SmxF liIOVrso64nx4V5gWj4A mWJbs2TuAw9nS7uYCe19 mbe-24">Reach that mental clarity you’ve been longing for.</h2><p class="Z2j5FoeQ_umI7vX0SmxF VB6LgUAmqv1DrUQhn1Tq product-scenes-section_description__sW_Mc">Your tasks are automatically sorted into Today, Upcoming, and custom Filter views to help you prioritize your most important work.</p></div><div class="ALjV_FDtdiJ2rGCAH1Lg OuHDHN6jISIW7I2iDwgs"><div class="mbs-32"><div class="product-ui-context_container__G4mMi"><div class=""><div class=""><div class=""><div class="product-ui-frame_productFrame__napMY product-ui-frame_productUIFrame__e7Ykc" aria-hidden="true"><div class="today-view-sequence_sequenceContainer__wiPiL" data-productui="container"><div class="product-ui-frame-background_framebackground__ykUlp today-view-sequence_frameBackground__Hbhqf"><img alt="" loading="lazy" width="590" height="472" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 590px) 100vw, 590px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/productui/columbia.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/productui/columbia.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/productui/columbia.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/productui/columbia.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/productui/columbia.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/productui/columbia.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/productui/columbia.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/productui/columbia.png?_a=ATCqVcY0"/></div><div class="product-ui-frame_productFrame__napMY product-ui-frame_productUIAppFrame__ZPFQf today-view-sequence_appFrame__oK9Zo product-ui-frame_baseRadius__AuMDc" aria-hidden="true"><div class="product-ui-view_viewContainer__hsvg9"><div class="product-ui-view_header__Tw6qW"><div class="product-ui-view_textContainer__5o_1E"><span class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa JsQfzfVodByEpTHhXMTC">Today</span></div><div><div class="Z2j5FoeQ_umI7vX0SmxF V0mB2BLv4MZSojdU0DJU product-ui-button_button__D_P_9" data-button="view"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-button_icon__DhFlD"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.636 4.75a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Zm-2.646.5a2.751 2.751 0 0 1 5.293 0H21a.75.75 0 0 1 0 1.5h-2.717a2.751 2.751 0 0 1-5.293 0H3a.75.75 0 1 1 0-1.5h9.99Zm-4.717 5.5a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Zm-2.647.5a2.751 2.751 0 0 1 5.293 0H21a.75.75 0 0 1 0 1.5H10.92a2.751 2.751 0 0 1-5.294 0H3a.75.75 0 1 1 0-1.5h2.626Zm10.01 5.5a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Zm-2.646.5a2.751 2.751 0 0 1 5.293 0H21a.75.75 0 0 1 0 1.5h-2.717a2.751 2.751 0 0 1-5.293 0H3a.75.75 0 1 1 0-1.5h9.99Z" fill="currentColor"></path></svg>View</div></div></div><div class="product-ui-view_viewSection__saPZB" data-productui="task-section"><div data-productui-task="yoga" data-productui="task-container"><div class="product-ui-task_task__QOJoP" data-productui="task"><div class="product-ui-task_taskOverflowContainer__2Yjek"><div class="product-ui-task_taskSection__VE96c"><div class="product-ui-task_taskInfo__rXfWV"><div class="product-ui-task_taskCircle__MDY83"><div class="product-ui-task-circle_taskCircle__WOYBl product-ui-task-circle_p3__4cr26" data-productui="taskcircle"></div></div><div class="product-ui-task_taskContent__aPTwE">Do 30 minutes of yoga 🧘</div></div><div class="product-ui-task_projectSection__rHNVH" style="--basis:40%"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:100%"></div><svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task_projectIcon__Imbv_" style="color:var(--product-ui-meta-red)"><circle cx="12" cy="12" r="5" fill="currentColor"></circle></svg></div></div></div><div></div></div><hr class="lKbkMAAbpfoobELp5Owc rb96v3SgFf7CAdIwrQ95" aria-orientation="horizontal" style="margin-block-start:var(--space-8)"/></div><div data-productui-task="shortcut" data-productui="task-container"><div class="product-ui-task_task__QOJoP" data-productui="task"><div class="product-ui-task_taskOverflowContainer__2Yjek"><div class="product-ui-task_taskSection__VE96c"><div class="product-ui-task_taskInfo__rXfWV"><div class="product-ui-task_taskCircle__MDY83"><div class="product-ui-task-circle_taskCircle__WOYBl product-ui-task-circle_p2__2Yig0" data-productui="taskcircle"></div></div><div class="product-ui-task_taskContent__aPTwE">Shortcut update</div></div><div class="product-ui-task_projectSection__rHNVH" style="--basis:20%"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:100%"></div><svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task_projectIcon__Imbv_" style="color:var(--product-ui-meta-lime-green)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg></div></div></div><div></div></div><hr class="lKbkMAAbpfoobELp5Owc rb96v3SgFf7CAdIwrQ95" aria-orientation="horizontal" style="margin-block-start:var(--space-8)"/></div><div data-productui-task="bread" data-productui="task-container"><div class="product-ui-task_task__QOJoP" data-productui="task"><div class="product-ui-task_taskOverflowContainer__2Yjek"><div class="product-ui-task_taskSection__VE96c"><div class="product-ui-task_taskInfo__rXfWV"><div class="product-ui-task_taskCircle__MDY83"><div class="product-ui-task-circle_taskCircle__WOYBl product-ui-task-circle_p4__yl_Hp" data-productui="taskcircle"></div></div><div class="product-ui-task_taskContent__aPTwE">Buy bread 🍞</div></div><div class="product-ui-task_projectSection__rHNVH" style="--basis:20%"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:100%"></div><svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task_projectIcon__Imbv_" style="color:var(--product-ui-meta-yellow)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg></div></div></div><div></div></div><hr class="lKbkMAAbpfoobELp5Owc rb96v3SgFf7CAdIwrQ95" aria-orientation="horizontal" style="margin-block-start:var(--space-8)"/></div><div data-productui-task="dentist" data-productui="task-container"><div class="product-ui-task_task__QOJoP" data-productui="task"><div class="product-ui-task_taskOverflowContainer__2Yjek"><div class="product-ui-task_taskSection__VE96c"><div class="product-ui-task_taskInfo__rXfWV"><div class="product-ui-task_taskCircle__MDY83"><div class="product-ui-task-circle_taskCircle__WOYBl product-ui-task-circle_p1__deyHl" data-productui="taskcircle"></div></div><div class="product-ui-task_taskContent__aPTwE">Dentist appointment</div></div><div class="product-ui-task_projectSection__rHNVH" style="--basis:40%"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:100%"></div><svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task_projectIcon__Imbv_" style="color:var(--product-ui-meta-blue)"><circle cx="12" cy="12" r="5" fill="currentColor"></circle></svg></div></div></div><div></div></div><hr class="lKbkMAAbpfoobELp5Owc rb96v3SgFf7CAdIwrQ95" aria-orientation="horizontal" style="margin-block-start:var(--space-8)"/></div></div><div class="product-ui-view_viewSection__saPZB product-ui-view_empty__8Jyd_" data-hide="true" data-productui="inbox-zero-section"><img loading="lazy" width="344" height="270" decoding="async" data-nimg="1" class="product-ui-view_emptyStateImage__AI5Ql" style="color:transparent" sizes="(max-width: 344px) 100vw, 344px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0"/><div data-productui="empty-section-text"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">You reached #TodoistZero!</p></div></div></div></div><div id="productUICursor" class="product-ui-cursor_productUICursor__a3j3y" data-productui="cursor"></div></div></div></div></div></div><div class="product-ui-context_controls__mE9dh"><button class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA RRhYDjs6PL1ltbRYaang lePD3jMfxmXWJSFrwC94"><span class="rym_lVoWNxRNMkfceBG7" aria-hidden="true"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 3.743a.733.733 0 0 1 1.09-.651l7.533 4.257a.75.75 0 0 1 0 1.302L5.09 12.908a.733.733 0 0 1-1.09-.65V3.742Z" fill="currentColor"></path></svg></span>Play</button></div></div></div></div></div></div><div class=""><div class=""><div data-scrollsection="anchor"><div class=""><p class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA product-scenes-section_preheader__DUAuK mbe-24">Get it all done</p><h2 class="Z2j5FoeQ_umI7vX0SmxF liIOVrso64nx4V5gWj4A mWJbs2TuAw9nS7uYCe19 mbe-24">Where work and personal tasks can finally coexist.</h2><p class="Z2j5FoeQ_umI7vX0SmxF VB6LgUAmqv1DrUQhn1Tq product-scenes-section_description__sW_Mc">Tons of tasks, just one app. With workspaces, your personal, work, and team tasks can all live harmoniously under the same roof. (Sigh of relief).</p></div></div><div class="ALjV_FDtdiJ2rGCAH1Lg OuHDHN6jISIW7I2iDwgs"><div class="mbs-32"><div class="product-ui-context_container__G4mMi"><div class=""><div class=""><div class=""><div class="product-ui-frame_productFrame__napMY product-ui-frame_productUIFrame__e7Ykc" aria-hidden="true"><div class="get-it-all-done-sequence_sequenceContainer__BDeOj"><div class="product-ui-frame-background_framebackground__ykUlp get-it-all-done-sequence_frameBackground__3pN8u product-ui-frame-background_palePink__VPQwZ"><img alt="" loading="lazy" width="590" height="472" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 590px) 100vw, 590px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/productui/pale_pink.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/productui/pale_pink.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/productui/pale_pink.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/productui/pale_pink.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/productui/pale_pink.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/productui/pale_pink.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/productui/pale_pink.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/productui/pale_pink.png?_a=ATCqVcY0"/></div><div class="product-ui-frame_productFrame__napMY product-ui-frame_productUIAppFrame__ZPFQf get-it-all-done-sequence_appFrame__DMzrW product-ui-frame_baseRadius__AuMDc" aria-hidden="true"><div class="product-ui-sidebar_container__Qiw6_ get-it-all-done-sequence_sidebar__tppMQ"><div class="product-ui-sidebar_section__i9_zT"><div class="product-ui-list-item_container__YjyEq product-ui-list-item_basicType__PMeAZ"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-blue)"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.246 4.73A2.25 2.25 0 0 1 7.435 3h9.13a2.25 2.25 0 0 1 2.189 1.73l2.226 9.346c.013.057.02.116.02.174v4.5A2.25 2.25 0 0 1 18.75 21H5.25A2.25 2.25 0 0 1 3 18.75v-4.5a.75.75 0 0 1 .02-.174L5.246 4.73Zm2.189-.23a.75.75 0 0 0-.73.577L4.5 14.338v4.412c0 .415.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-4.412l-2.205-9.261a.75.75 0 0 0-.73-.577h-9.13ZM6.25 15a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75 1.75 1.75 0 1 0 3.5 0 .75.75 0 0 1 .75-.75H17a.75.75 0 0 1 0 1.5h-1.837a3.251 3.251 0 0 1-6.326 0H7a.75.75 0 0 1-.75-.75Z" fill="currentColor"></path></svg><div class="product-ui-list-item_abstract__74PRc"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:20%"></div></div></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_basicType__PMeAZ"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--display-onlight-color-green)"><path fill-rule="evenodd" clip-rule="evenodd" d="M6 8a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 8Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Zm3-1.5A1.5 1.5 0 0 0 4.5 6v12A1.5 1.5 0 0 0 6 19.5h12a1.5 1.5 0 0 0 1.5-1.5V6A1.5 1.5 0 0 0 18 4.5H6Z" fill="currentColor"></path><path d="M7.473 17v-.892L9.758 13.9c.213-.213.391-.403.534-.57.143-.165.25-.327.323-.485.072-.158.108-.326.108-.505a.938.938 0 0 0-.14-.52.903.903 0 0 0-.38-.34 1.192 1.192 0 0 0-.547-.121c-.211 0-.396.044-.556.131a.919.919 0 0 0-.368.37 1.174 1.174 0 0 0-.128.566H7.428c0-.417.095-.78.285-1.09.191-.308.456-.547.792-.715.34-.17.727-.256 1.164-.256.447 0 .84.082 1.176.246.336.164.598.39.783.678.187.287.281.615.281.984 0 .245-.048.487-.144.726-.094.236-.26.5-.498.789-.237.29-.57.638-1 1.045L9.18 15.929v.045h2.825V17H7.473ZM16.024 10.454V17h-1.236v-5.353h-.039l-1.524.971v-1.122l1.627-1.042h1.172Z" fill="currentColor"></path></svg><div class="product-ui-list-item_abstract__74PRc"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:40%"></div></div></div></div></div><div class="product-ui-sidebar_section__i9_zT product-ui-sidebar_workspace__vbTEu"><div class="product-ui-list-item_container__YjyEq product-ui-list-item_sideBarType__qegAx"><div class="product-ui-list-item_left__FeT3F"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA">Workspaces</p></div><div class="product-ui-list-item_right__aflHW"></div></div><div class="product-ui-sidebar_section__i9_zT product-ui-sidebar_content__bF_Kp"><div class="product-ui-sidebar_section__i9_zT"><div class="product-ui-list-item_container__YjyEq product-ui-list-item_sideBarType__qegAx" data-productuisidebarheaderitem="personal"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#avatar-personal_svg__a)"><path d="M0 6a6 6 0 0 1 6-6h12a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6V6Z" fill="#FBD5D0"></path><mask id="avatar-personal_svg__b" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="24"><path d="M0 6a6 6 0 0 1 6-6h12a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6V6Z" fill="#FBD5D0"></path></mask><g mask="url(#avatar-personal_svg__b)" fill="#F8EBEB"><path d="M-3.091-1.94C-3.221-1.545.637-.425 3.468.365l24.897 6.952c1.56.436 4.647 1.405 5.11.955.464-.45-1.968-1.3-3.239-1.655-1.27-.355-2.973-.616-4.62-1.14-1.645-.524-3.446-1.949-7.33-2.99-3.883-1.042-5.365-.748-7.472-1.25C8.707.733 4.355-.65 1.55-1.33c-3.344-.81-4.53-.948-4.64-.61Z"></path><path d="M-3.726-.012c.438-1.331 4.353-.383 7.184.408l24.896 6.952c1.56.435 4.79.974 4.486 2.851-.303 1.877-2.962 1.716-4.233 1.361-1.271-.354-2.69-1.477-4.421-1.744-1.73-.264-4.753 2.015-8.58.802s-4.37-3.764-6.364-4.611C7.248 5.159 2.674 4.45.005 3.355c-3.18-1.306-4.111-2.22-3.731-3.367ZM29.015 28.494c.22-.494-4.649-2.452-8.225-3.848l-31.453-12.279c-1.97-.77-5.856-2.43-6.517-1.907-.661.524 2.388 1.947 3.994 2.574 1.606.627 3.784 1.187 5.856 2.083 2.07.895 4.225 2.982 9.137 4.841 4.912 1.86 6.876 1.67 9.549 2.598 2.673.928 8.149 3.292 11.708 4.542 4.24 1.489 5.764 1.823 5.95 1.396Z"></path><path d="M30.092 26.071c-.744 1.674-5.708-.069-9.284-1.465l-31.453-12.278c-1.97-.77-6.097-1.89-5.458-4.29.638-2.4 4.073-1.845 5.679-1.219 1.606.627 3.303 2.27 5.518 2.843 2.215.57 6.44-2 11.256.076 4.816 2.075 5.19 5.461 7.67 6.822 2.481 1.362 8.334 2.878 11.66 4.65 3.964 2.112 5.055 3.42 4.412 4.861Z"></path></g><path d="M8.375 18V6.727h4.227c.866 0 1.592.162 2.18.485.59.323 1.036.767 1.337 1.332.305.561.457 1.2.457 1.915 0 .723-.152 1.365-.457 1.927a3.265 3.265 0 0 1-1.348 1.326c-.595.32-1.327.48-2.197.48H9.773v-1.68h2.526c.506 0 .921-.088 1.244-.264.323-.176.561-.418.716-.726.157-.309.236-.663.236-1.063 0-.4-.079-.752-.236-1.057a1.608 1.608 0 0 0-.722-.71c-.322-.172-.739-.258-1.249-.258h-1.871V18H8.375Z" fill="#D64638"></path></g><defs><clipPath id="avatar-personal_svg__a"><path fill="currentColor" d="M0 0h24v24H0z"></path></clipPath></defs></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA">Personal</p></div><div class="product-ui-list-item_right__aflHW"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-list-item_icon__8fwEX" color="var(--display-onlight-tertiary)"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.127 4.623a.886.886 0 0 1 0 1.254L9.254 11.75l5.873 5.873a.886.886 0 0 1-1.254 1.254l-6.5-6.5a.886.886 0 0 1 0-1.254l6.5-6.5a.886.886 0 0 1 1.254 0Z" fill="currentcolor"></path></svg></div></div><div data-productui="sidebarsection" data-sidebarsection="personal"><div class="product-ui-list-item_container__YjyEq product-ui-list-item_basicType__PMeAZ"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-red)"><circle cx="12" cy="12" r="5" fill="currentColor"></circle></svg><div class="product-ui-list-item_abstract__74PRc"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:20%"></div></div></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_basicType__PMeAZ"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-yellow)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><div class="product-ui-list-item_abstract__74PRc"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:40%"></div></div></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_basicType__PMeAZ"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-blue)"><circle cx="12" cy="12" r="5" fill="currentColor"></circle></svg><div class="product-ui-list-item_abstract__74PRc"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:60%"></div></div></div></div></div></div><div class="product-ui-sidebar_section__i9_zT"><div class="product-ui-list-item_container__YjyEq product-ui-list-item_sideBarType__qegAx" data-productuisidebarheaderitem="team"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#avatar-teams_svg__a)"><path d="M0 6a6 6 0 0 1 6-6h12a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6V6Z" fill="#E7E0B1"></path><mask id="avatar-teams_svg__b" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="-1" y="0" width="25" height="24"><path d="M0 6a6 6 0 0 1 6-6h12a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6V6Z" fill="#F6EDC6"></path></mask><g mask="url(#avatar-teams_svg__b)" fill="#F6EDC6"><path d="M32.92 10.56c-.186-.37-3.705 1.566-6.266 3.009L4.134 26.258c-1.412.795-4.28 2.293-4.29 2.938-.01.646 2.311-.472 3.461-1.12 1.15-.647 2.538-1.666 4.073-2.46 1.534-.793 3.815-1.06 7.298-3.069 3.482-2.01 4.322-3.265 6.167-4.4 1.846-1.134 5.9-3.234 8.366-4.737 2.938-1.792 3.874-2.533 3.712-2.85Z"></path><path d="M32.007 8.748c.631 1.252-2.807 3.349-5.368 4.792L4.12 26.227c-1.411.795-4.076 2.698-5.188 1.156-1.113-1.542.88-3.308 2.03-3.956 1.15-.648 2.946-.857 4.36-1.893 1.41-1.036 1.935-4.785 5.5-6.633 3.563-1.849 5.751-.43 7.76-1.24 2.01-.81 5.745-3.544 8.407-4.657 3.173-1.325 4.477-1.337 5.019-.257ZM-11.301 11.743c.194.504 5.02-1.553 8.537-3.095L28.158-4.91c1.938-.85 5.86-2.422 5.957-3.26.097-.838-3.065.312-4.644 1.004-1.578.692-3.515 1.836-5.613 2.668-2.097.83-5.097.88-9.885 3.037C9.185.697 7.93 2.22 5.384 3.455c-2.546 1.234-8.09 3.434-11.49 5.067-4.051 1.946-5.365 2.787-5.195 3.22Z"></path><path d="M-10.35 14.217c-.657-1.71 4.085-3.987 7.601-5.529L28.174-4.87c1.937-.85 5.647-2.975 6.893-.826 1.245 2.149-1.576 4.185-3.154 4.877-1.58.692-3.941.73-5.913 1.892-1.968 1.164-3.139 5.968-8.012 7.906-4.873 1.938-7.532-.192-10.248.6-2.717.791-7.928 3.857-11.533 4.957-4.296 1.31-5.992 1.155-6.557-.319Z"></path></g><path d="M7.5 8.44V6.726h8.994V8.44H13.01V18h-2.025V8.44H7.5Z" fill="#BD8800"></path></g><defs><clipPath id="avatar-teams_svg__a"><path fill="currentColor" d="M0 0h24v24H0z"></path></clipPath></defs></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA">Team</p></div><div class="product-ui-list-item_right__aflHW"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-list-item_icon__8fwEX" color="var(--display-onlight-tertiary)"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.127 4.623a.886.886 0 0 1 0 1.254L9.254 11.75l5.873 5.873a.886.886 0 0 1-1.254 1.254l-6.5-6.5a.886.886 0 0 1 0-1.254l6.5-6.5a.886.886 0 0 1 1.254 0Z" fill="currentcolor"></path></svg></div></div><div data-productui="sidebarsection" data-sidebarsection="team"><div class="product-ui-list-item_container__YjyEq product-ui-list-item_basicType__PMeAZ"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-orange)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><div class="product-ui-list-item_abstract__74PRc"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:60%"></div></div></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_basicType__PMeAZ"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-purple)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><div class="product-ui-list-item_abstract__74PRc"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:80%"></div></div></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_basicType__PMeAZ"><div class="product-ui-list-item_left__FeT3F"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-lime-green)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><div class="product-ui-list-item_abstract__74PRc"><div class="product-ui-skeleton-text_skeletonText__HSPz_" style="--inlineSize:40%"></div></div></div></div></div></div></div></div></div><div class="product-ui-view_viewContainer__hsvg9" data-productui="ui-view" data-productuiview="inbox-zero"><div class="product-ui-view_header__Tw6qW"><div class="product-ui-view_textContainer__5o_1E"><span class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa JsQfzfVodByEpTHhXMTC">Today</span></div></div><div class="product-ui-view_viewSection__saPZB product-ui-view_empty__8Jyd_"><img loading="lazy" width="344" height="270" decoding="async" data-nimg="1" class="product-ui-view_emptyStateImage__AI5Ql" style="color:transparent" sizes="(max-width: 344px) 100vw, 344px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/product-ui/empty-illustration.jpg?_a=ATCqVcY0"/><div data-productui="empty-section-text"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">You reached #TodoistZero!</p></div></div></div><div class="product-ui-view_viewContainer__hsvg9" data-productui="ui-view" data-productuiview="personal-workspace"><div class="product-ui-view_header__Tw6qW product-ui-view_workspace__rj2N4"><div class="product-ui-view_textContainer__5o_1E"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-view_icon__6BxqD"><g clip-path="url(#avatar-personal_svg__a)"><path d="M0 6a6 6 0 0 1 6-6h12a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6V6Z" fill="#FBD5D0"></path><mask id="avatar-personal_svg__b" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="24"><path d="M0 6a6 6 0 0 1 6-6h12a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6V6Z" fill="#FBD5D0"></path></mask><g mask="url(#avatar-personal_svg__b)" fill="#F8EBEB"><path d="M-3.091-1.94C-3.221-1.545.637-.425 3.468.365l24.897 6.952c1.56.436 4.647 1.405 5.11.955.464-.45-1.968-1.3-3.239-1.655-1.27-.355-2.973-.616-4.62-1.14-1.645-.524-3.446-1.949-7.33-2.99-3.883-1.042-5.365-.748-7.472-1.25C8.707.733 4.355-.65 1.55-1.33c-3.344-.81-4.53-.948-4.64-.61Z"></path><path d="M-3.726-.012c.438-1.331 4.353-.383 7.184.408l24.896 6.952c1.56.435 4.79.974 4.486 2.851-.303 1.877-2.962 1.716-4.233 1.361-1.271-.354-2.69-1.477-4.421-1.744-1.73-.264-4.753 2.015-8.58.802s-4.37-3.764-6.364-4.611C7.248 5.159 2.674 4.45.005 3.355c-3.18-1.306-4.111-2.22-3.731-3.367ZM29.015 28.494c.22-.494-4.649-2.452-8.225-3.848l-31.453-12.279c-1.97-.77-5.856-2.43-6.517-1.907-.661.524 2.388 1.947 3.994 2.574 1.606.627 3.784 1.187 5.856 2.083 2.07.895 4.225 2.982 9.137 4.841 4.912 1.86 6.876 1.67 9.549 2.598 2.673.928 8.149 3.292 11.708 4.542 4.24 1.489 5.764 1.823 5.95 1.396Z"></path><path d="M30.092 26.071c-.744 1.674-5.708-.069-9.284-1.465l-31.453-12.278c-1.97-.77-6.097-1.89-5.458-4.29.638-2.4 4.073-1.845 5.679-1.219 1.606.627 3.303 2.27 5.518 2.843 2.215.57 6.44-2 11.256.076 4.816 2.075 5.19 5.461 7.67 6.822 2.481 1.362 8.334 2.878 11.66 4.65 3.964 2.112 5.055 3.42 4.412 4.861Z"></path></g><path d="M8.375 18V6.727h4.227c.866 0 1.592.162 2.18.485.59.323 1.036.767 1.337 1.332.305.561.457 1.2.457 1.915 0 .723-.152 1.365-.457 1.927a3.265 3.265 0 0 1-1.348 1.326c-.595.32-1.327.48-2.197.48H9.773v-1.68h2.526c.506 0 .921-.088 1.244-.264.323-.176.561-.418.716-.726.157-.309.236-.663.236-1.063 0-.4-.079-.752-.236-1.057a1.608 1.608 0 0 0-.722-.71c-.322-.172-.739-.258-1.249-.258h-1.871V18H8.375Z" fill="#D64638"></path></g><defs><clipPath id="avatar-personal_svg__a"><path fill="currentColor" d="M0 0h24v24H0z"></path></clipPath></defs></svg><span class="Z2j5FoeQ_umI7vX0SmxF Cym2iJuXNbL6HXbNtN74 JsQfzfVodByEpTHhXMTC">Personal</span></div></div><div class="product-ui-view_viewSection__saPZB"><div class="product-ui-list-item_container__YjyEq product-ui-list-item_projectType__bM0YF"><div class="product-ui-list-item_left__FeT3F"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-red)"><circle cx="12" cy="12" r="5" fill="currentColor"></circle></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc">Fitness</p></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_projectType__bM0YF"><div class="product-ui-list-item_left__FeT3F"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-yellow)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc">Groceries</p></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_projectType__bM0YF"><div class="product-ui-list-item_left__FeT3F"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-blue)"><circle cx="12" cy="12" r="5" fill="currentColor"></circle></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc">Appointments</p></div></div></div></div><div class="product-ui-view_viewContainer__hsvg9" data-productui="ui-view" data-productuiview="team-workspace"><div class="product-ui-view_header__Tw6qW product-ui-view_workspace__rj2N4"><div class="product-ui-view_textContainer__5o_1E"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-view_icon__6BxqD"><g clip-path="url(#avatar-teams_svg__a)"><path d="M0 6a6 6 0 0 1 6-6h12a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6V6Z" fill="#E7E0B1"></path><mask id="avatar-teams_svg__b" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="-1" y="0" width="25" height="24"><path d="M0 6a6 6 0 0 1 6-6h12a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6V6Z" fill="#F6EDC6"></path></mask><g mask="url(#avatar-teams_svg__b)" fill="#F6EDC6"><path d="M32.92 10.56c-.186-.37-3.705 1.566-6.266 3.009L4.134 26.258c-1.412.795-4.28 2.293-4.29 2.938-.01.646 2.311-.472 3.461-1.12 1.15-.647 2.538-1.666 4.073-2.46 1.534-.793 3.815-1.06 7.298-3.069 3.482-2.01 4.322-3.265 6.167-4.4 1.846-1.134 5.9-3.234 8.366-4.737 2.938-1.792 3.874-2.533 3.712-2.85Z"></path><path d="M32.007 8.748c.631 1.252-2.807 3.349-5.368 4.792L4.12 26.227c-1.411.795-4.076 2.698-5.188 1.156-1.113-1.542.88-3.308 2.03-3.956 1.15-.648 2.946-.857 4.36-1.893 1.41-1.036 1.935-4.785 5.5-6.633 3.563-1.849 5.751-.43 7.76-1.24 2.01-.81 5.745-3.544 8.407-4.657 3.173-1.325 4.477-1.337 5.019-.257ZM-11.301 11.743c.194.504 5.02-1.553 8.537-3.095L28.158-4.91c1.938-.85 5.86-2.422 5.957-3.26.097-.838-3.065.312-4.644 1.004-1.578.692-3.515 1.836-5.613 2.668-2.097.83-5.097.88-9.885 3.037C9.185.697 7.93 2.22 5.384 3.455c-2.546 1.234-8.09 3.434-11.49 5.067-4.051 1.946-5.365 2.787-5.195 3.22Z"></path><path d="M-10.35 14.217c-.657-1.71 4.085-3.987 7.601-5.529L28.174-4.87c1.937-.85 5.647-2.975 6.893-.826 1.245 2.149-1.576 4.185-3.154 4.877-1.58.692-3.941.73-5.913 1.892-1.968 1.164-3.139 5.968-8.012 7.906-4.873 1.938-7.532-.192-10.248.6-2.717.791-7.928 3.857-11.533 4.957-4.296 1.31-5.992 1.155-6.557-.319Z"></path></g><path d="M7.5 8.44V6.726h8.994V8.44H13.01V18h-2.025V8.44H7.5Z" fill="#BD8800"></path></g><defs><clipPath id="avatar-teams_svg__a"><path fill="currentColor" d="M0 0h24v24H0z"></path></clipPath></defs></svg><span class="Z2j5FoeQ_umI7vX0SmxF Cym2iJuXNbL6HXbNtN74 JsQfzfVodByEpTHhXMTC">Team</span></div></div><div class="product-ui-view_viewSection__saPZB"><div class="product-ui-list-item_container__YjyEq product-ui-list-item_projectType__bM0YF"><div class="product-ui-list-item_left__FeT3F"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-orange)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc">New Brand</p></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_projectType__bM0YF"><div class="product-ui-list-item_left__FeT3F"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-purple)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc">Website Update</p></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_projectType__bM0YF"><div class="product-ui-list-item_left__FeT3F"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-lime-green)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc">Product Roadmap</p></div></div><div class="product-ui-list-item_container__YjyEq product-ui-list-item_projectType__bM0YF"><div class="product-ui-list-item_left__FeT3F"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-lavender)"><path d="M12 11.537A3.768 3.768 0 1 0 12 4a3.768 3.768 0 0 0 0 7.537ZM18.78 16.376c.744 1.371-.509 2.697-2.07 2.697H7.29c-1.561 0-2.814-1.326-2.07-2.697.872-1.606 2.747-3.332 6.78-3.332s5.908 1.726 6.78 3.332Z" fill="currentColor"></path></svg><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc">Meeting Agenda</p></div></div></div></div></div><div class="product-ui-cursor_productUICursor__a3j3y" data-productui="cursor"></div></div></div></div></div></div><div class="product-ui-context_controls__mE9dh"><button class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA RRhYDjs6PL1ltbRYaang lePD3jMfxmXWJSFrwC94"><span class="rym_lVoWNxRNMkfceBG7" aria-hidden="true"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 3.743a.733.733 0 0 1 1.09-.651l7.533 4.257a.75.75 0 0 1 0 1.302L5.09 12.908a.733.733 0 0 1-1.09-.65V3.742Z" fill="currentColor"></path></svg></span>Play</button></div></div></div></div></div></div></div></div></div></div><div class="scroll-section_scrollContainer__DxGAb"><div data-scrollsection="sticky"><div class=""><div class="product-ui-context_container__G4mMi"><div class=""><div class=""><div class=""><div class="product-ui-frame_productFrame__napMY product-ui-frame_productUIFrame__e7Ykc" aria-hidden="true"><div class="quick-add-sequence_sequenceContainer__mbCx7"><div class="product-ui-frame-background_framebackground__ykUlp quick-add-sequence_frameBackground__TuGRX product-ui-frame-background_antique__PoHwY"><img alt="" loading="lazy" width="590" height="472" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 590px) 100vw, 590px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/productui/antique.png?_a=ATCqVcY0"/></div><div class="product-ui-overlay_overlay__p3EBz quick-add-sequence_overlay__O3SGJ"><div class="product-ui-view_viewContainer__hsvg9"><div class="product-ui-view_header__Tw6qW"><div class="product-ui-view_textContainer__5o_1E"><span class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa JsQfzfVodByEpTHhXMTC">Today</span></div></div></div></div><div class="quick-add_quickAddContainer__jCNrC quick-add-sequence_quickAdd__HndeA" data-productui="quickadd"><div class="quick-add_details__9MGr9"><div class="quick-add_inputFields__Ejr6b"><div class="quick-add_taskContainer__YeL65"><div class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa DLF4ip7391hTQFmMhXrA"><span id="quickAddPlaceholder" class="quick-add_intentContainer__QNl8d quick-add_placeholder__da9_w" data-productui="placeholder">Task name</span> <span id="taskText" class="quick-add_intentContainer__QNl8d" data-productui="quickAddText"></span> <span id="taskTime" class="quick-add_intentContainer__QNl8d" data-productui="quickAddText"></span> <span id="taskPriority" class="quick-add_intentContainer__QNl8d" data-productui="quickAddText"></span></div></div></div><div class="quick-add_attributesContainer__PYBL9"><div class="quick-add_attributeContainer__c3TJR"><div class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ product-ui-task-attribute-pill_pill__a2pAO"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task-attribute-pill_prefixIcon__8lJjH"><path fill-rule="evenodd" clip-rule="evenodd" d="M6 8a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 8Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6Zm3-1.5A1.5 1.5 0 0 0 4.5 6v12A1.5 1.5 0 0 0 6 19.5h12a1.5 1.5 0 0 0 1.5-1.5V6A1.5 1.5 0 0 0 18 4.5H6Z" fill="currentColor"></path><path d="M17.25 16.125a1.125 1.125 0 1 1-2.25 0 1.125 1.125 0 0 1 2.25 0Z" fill="currentColor"></path></svg><span>Due date</span></div><div class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ product-ui-task-attribute-pill_pill__a2pAO"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task-attribute-pill_prefixIcon__8lJjH"><path fill-rule="evenodd" clip-rule="evenodd" d="M3 4.5a.75.75 0 0 1 .415-.67C4.537 3.267 6.144 3 8.25 3c1.352 0 2.228.202 3.987.789 1.616.538 2.365.711 3.513.711 1.894 0 3.287-.232 4.165-.67A.75.75 0 0 1 21 4.5v9.75a.75.75 0 0 1-.415.671c-1.122.562-2.729.83-4.835.83-1.352 0-2.228-.203-3.987-.79-1.616-.538-2.365-.71-3.513-.71-1.619 0-2.872.169-3.75.492v5.507a.75.75 0 1 1-1.5 0V4.5Zm1.5 8.668V4.993C5.378 4.67 6.631 4.5 8.25 4.5c1.148 0 1.897.173 3.513.712 1.759.586 2.635.788 3.987.788 1.502 0 2.75-.136 3.75-.418v8.175c-.878.324-2.131.493-3.75.493-1.148 0-1.897-.173-3.513-.711-1.759-.587-2.635-.789-3.987-.789-1.502 0-2.75.136-3.75.418Z" fill="currentColor"></path></svg><span>Priority</span></div></div><div class="Z2j5FoeQ_umI7vX0SmxF zRNctiZzzNXY_x4Xux4_ product-ui-task-attribute-pill_pill__a2pAO product-ui-task-attribute-pill_overflow__m40_l"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-task-attribute-pill_prefixIcon__8lJjH"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 12a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm7 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm7 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z" fill="currentColor"></path></svg></div></div></div><hr class="lKbkMAAbpfoobELp5Owc rb96v3SgFf7CAdIwrQ95" aria-orientation="horizontal"/><div class="quick-add_footer__ypzk6"><div class="quick-add_footerContainer__SCLk_"><div class="Z2j5FoeQ_umI7vX0SmxF V0mB2BLv4MZSojdU0DJU product-ui-button_button__D_P_9"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--product-ui-meta-blue)" class="product-ui-button_icon__DhFlD"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.246 4.73A2.25 2.25 0 0 1 7.435 3h9.13a2.25 2.25 0 0 1 2.189 1.73l2.226 9.346c.013.057.02.116.02.174v4.5A2.25 2.25 0 0 1 18.75 21H5.25A2.25 2.25 0 0 1 3 18.75v-4.5a.75.75 0 0 1 .02-.174L5.246 4.73Zm2.189-.23a.75.75 0 0 0-.73.577L4.5 14.338v4.412c0 .415.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-4.412l-2.205-9.261a.75.75 0 0 0-.73-.577h-9.13ZM6.25 15a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75 1.75 1.75 0 1 0 3.5 0 .75.75 0 0 1 .75-.75H17a.75.75 0 0 1 0 1.5h-1.837a3.251 3.251 0 0 1-6.326 0H7a.75.75 0 0 1-.75-.75Z" fill="currentColor"></path></svg>Inbox<svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="product-ui-button_icon__DhFlD"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.873 8.873a.886.886 0 0 1 1.254 0L12 14.746l5.873-5.873a.886.886 0 1 1 1.254 1.254l-6.5 6.5a.886.886 0 0 1-1.254 0l-6.5-6.5a.886.886 0 0 1 0-1.254Z" fill="currentcolor"></path></svg></div><div class="quick-add_footerSpacer__cyK39"></div><button class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA addTaskButton" data-productui="cta">Add task</button></div></div></div><div id="productUICursor" class="product-ui-cursor_productUICursor__a3j3y" data-productui="cursor"></div></div></div></div></div></div><div class="product-ui-context_controls__mE9dh"><button class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA RRhYDjs6PL1ltbRYaang lePD3jMfxmXWJSFrwC94"><span class="rym_lVoWNxRNMkfceBG7" aria-hidden="true"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 3.743a.733.733 0 0 1 1.09-.651l7.533 4.257a.75.75 0 0 1 0 1.302L5.09 12.908a.733.733 0 0 1-1.09-.65V3.742Z" fill="currentColor"></path></svg></span>Play</button></div></div></div></div></div></div></div><section><div class="Yq3CJKRaogbgzFJ2SQ5k complexity-slider-section_anchor__DIVzm" id="simple-or-complex"></div><div class="pi-24 mbe-128 md-mbe-192 YttEe7kIjjIAtcbhghld"><div class=""><div class="complexity-slider-section_heading__ByIrl mbe-96"><h2 class="Z2j5FoeQ_umI7vX0SmxF L29FjGZVki0rW0QIhG_A mWJbs2TuAw9nS7uYCe19 mbe-32">“Todoist makes it easy to go as simple or as complex as you want”</h2><p class="Z2j5FoeQ_umI7vX0SmxF Cym2iJuXNbL6HXbNtN74">– The Verge</p></div><div class="complexity-slider-section_sliderContainer___70_3"><div class="complexity-slider-section_contentContainer__DcTKx"><div class="complexity-slider-section_videoContainer__ybQpi"><video muted=""><source src="https://res.cloudinary.com/imagist/video/fetch/f_auto/q_auto/https://todoist.com/static/home/complexity-slider/complexity-video.mp4?_a=ATCqVcY0" type="video/mp4"/></video></div><div class="slider-container_sliderContainer__lg_FJ"><li class="Z2j5FoeQ_umI7vX0SmxF V0mB2BLv4MZSojdU0DJU CUB8EtmOP9Ef5rbW73H3"><span class="zDThJNppb_pUvKmum1AH">Simple</span></li><div class="slider-container_progressContainer__kQ5PZ"><div class="slider-container_progressBackground__nTJVb"></div><div class="slider-container_progressBar__JoJI3" style="--progress:0%"></div><div class="dot-indicator_dotIndicator__2z2lL" style="--progress:0%"><div class="dot-indicator_default__2yZ5A"></div></div><div class="dot-indicator_dotIndicator__2z2lL" style="--progress:33%"><div class="dot-indicator_default__2yZ5A"></div></div><div class="dot-indicator_dotIndicator__2z2lL" style="--progress:67%"><div class="dot-indicator_default__2yZ5A"></div></div><div class="dot-indicator_dotIndicator__2z2lL" style="--progress:100%"><div class="dot-indicator_default__2yZ5A"></div></div></div><li class="Z2j5FoeQ_umI7vX0SmxF V0mB2BLv4MZSojdU0DJU CUB8EtmOP9Ef5rbW73H3"><span class="zDThJNppb_pUvKmum1AH">Advanced</span></li></div><div class="complexity-slider-section_list__n9BQE"><div></div></div></div></div></div></div></section><div class="mbe-128 xlg-mbe-192 explore-section_container__JlPA8 YttEe7kIjjIAtcbhghld"><h2 class="Z2j5FoeQ_umI7vX0SmxF Cym2iJuXNbL6HXbNtN74 mWJbs2TuAw9nS7uYCe19 mbe-48">Explore all Todoist has to offer</h2><div class="explore-section_grid__eYZFt"><a class="icon-card_iconCard__rsWyN" href="/features"><img loading="lazy" width="120" height="119" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 120px) 100vw, 120px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/explore/features.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/explore/features.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/explore/features.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/explore/features.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/explore/features.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/explore/features.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/features.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/features.png?_a=ATCqVcY0"/><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Features</p></a><a class="icon-card_iconCard__rsWyN" href="/templates"><img loading="lazy" width="120" height="119" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 120px) 100vw, 120px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/explore/templates.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/explore/templates.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/explore/templates.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/explore/templates.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/explore/templates.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/explore/templates.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/templates.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/templates.png?_a=ATCqVcY0"/><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Template gallery</p></a><a class="icon-card_iconCard__rsWyN" href="/productivity-methods"><img loading="lazy" width="120" height="119" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 120px) 100vw, 120px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/explore/prod-quiz.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/explore/prod-quiz.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/explore/prod-quiz.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/explore/prod-quiz.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/explore/prod-quiz.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/explore/prod-quiz.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/prod-quiz.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/prod-quiz.png?_a=ATCqVcY0"/><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Productivity quiz</p></a><a class="icon-card_iconCard__rsWyN" href="/integrations"><img loading="lazy" width="120" height="119" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 120px) 100vw, 120px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/explore/extensions.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/explore/extensions.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/explore/extensions.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/explore/extensions.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/explore/extensions.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/explore/extensions.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/extensions.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/extensions.png?_a=ATCqVcY0"/><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Extension gallery</p></a><a class="icon-card_iconCard__rsWyN" href="/inspiration"><img loading="lazy" width="120" height="119" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 120px) 100vw, 120px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/explore/inspiration.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/explore/inspiration.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/explore/inspiration.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/explore/inspiration.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/explore/inspiration.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/explore/inspiration.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/inspiration.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/explore/inspiration.png?_a=ATCqVcY0"/><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc ghjFWYpaMMS6gFyyKavs">Inspiration hub</p></a></div></div><div class="container-two-column_containerTwoColumns__BHIh5 container-two-column_breakAbove_xlg__O8PgY YttEe7kIjjIAtcbhghld BNiOPRzcZXhZrycvcnLa"><div class=""><div class="container-two-column_textContainerInner__zC5fl container-two-column_lg__QePrC"><div class="stats-section_copy__1Xvpc"><p class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA stats-section_preheader__xNKo4">In it for the long haul</p><h2 class="Z2j5FoeQ_umI7vX0SmxF liIOVrso64nx4V5gWj4A mWJbs2TuAw9nS7uYCe19">A task manager you can trust for life</h2><p class="Z2j5FoeQ_umI7vX0SmxF VB6LgUAmqv1DrUQhn1Tq mbe-8 stats-section_description__HnHYw">We’ve been building Todoist for 16 years<!-- --> <!-- -->and 182 days.<!-- --> <!-- -->Rest assured that we’ll never sell out to the highest bidder.</p><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV odtOENRM8nO67fi6A2f8 o9DYmt4xfLaImiVzI9dQ Bxh88ZVLben5y9mwWDWw zHWt6OJ9yacfxH7GocTm stats-section_articleLink__C0Fl5" rel="noopener noreferrer" href="https://blog.doist.com/no-exit-strategy/?utm_source=todoist&amp;utm_medium=home&amp;utm_campaign=new_td_landing_page_c2205" target="_blank"><svg width="1em" height="1em" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg" class="fcno40qhmCgDkMq5y3Tk"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.585 3.545c.915-.608 2.12-.96 3.415-.96 1.107 0 2.149.257 3 .712.851-.455 1.893-.713 3-.713 1.295 0 2.5.353 3.415.961a.75.75 0 0 1 .335.625v8.666a.75.75 0 0 1-1.165.625c-.642-.426-1.55-.71-2.585-.71-1.034 0-1.943.284-2.585.71a.75.75 0 0 1-.83 0c-.642-.426-1.551-.71-2.585-.71s-1.943.284-2.585.71a.75.75 0 0 1-1.165-.625V4.17a.75.75 0 0 1 .335-.625ZM7.25 4.598c-.607-.315-1.385-.514-2.25-.514s-1.643.199-2.25.514v7.034a6.666 6.666 0 0 1 2.25-.38c.8 0 1.566.134 2.25.38V4.598Zm1.5 7.034a6.666 6.666 0 0 1 2.25-.38c.8 0 1.566.134 2.25.38V4.598c-.607-.315-1.384-.514-2.25-.514-.865 0-1.643.199-2.25.514v7.034Z" fill="currentColor"></path></svg>Read about our long-term mission</a></div></div></div><div class="stats-section_stats__z2bRF"><div class="ALjV_FDtdiJ2rGCAH1Lg hbwC2BLMAPgUWx5ocgNY"><div class="stats-section_carousel__mn2j5"><div class="stats-section_scroller__RYon_"><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">30+ million</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">app downloads</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">2 billion+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">tasks completed</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">160+ countries</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">worldwide</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">1 million+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">Pro users</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">30+ million</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">app downloads</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">2 billion+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">tasks completed</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">160+ countries</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">worldwide</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">1 million+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">Pro users</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">30+ million</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">app downloads</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">2 billion+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">tasks completed</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">160+ countries</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">worldwide</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">1 million+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">Pro users</p></div></div></div></div></div><div class="ALjV_FDtdiJ2rGCAH1Lg OuHDHN6jISIW7I2iDwgs"><div class="stats-section_carousel__mn2j5"><div class="stats-section_scroller__RYon_"><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">30+ million</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">app downloads</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">2 billion+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">tasks completed</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">160+ countries</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">worldwide</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">1 million+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">Pro users</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">30+ million</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">app downloads</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">2 billion+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">tasks completed</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">160+ countries</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">worldwide</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">1 million+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">Pro users</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">30+ million</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">app downloads</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">2 billion+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">tasks completed</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">160+ countries</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">worldwide</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">1 million+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">Pro users</p></div></div></div></div><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV odtOENRM8nO67fi6A2f8 o9DYmt4xfLaImiVzI9dQ stats-section_articleLink__C0Fl5 mbs-16" rel="noopener noreferrer" href="https://blog.doist.com/no-exit-strategy/?utm_source=todoist&amp;utm_medium=home&amp;utm_campaign=new_td_landing_page_c2205" target="_blank">Read about our long-term mission</a></div><div class="ALjV_FDtdiJ2rGCAH1Lg Of6PyXOI70TmrKqmrOnl SVhGiSzS0M7007sJ4mKJ"><div class="stats-section_static__EBLHN"><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-1.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">30+ million</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">app downloads</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-2.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">2 billion+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">tasks completed</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-3.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">160+ countries</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">worldwide</p></div></div><div class="stats-box_statsBox__bWQNv"><div class="stats-box_statsBoxImgContainer__vBeXS"><img fetchPriority="high" width="300" height="300" decoding="async" data-nimg="1" style="color:transparent" sizes="(max-width: 300px) 100vw, 300px" srcSet="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_480/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 480w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_768/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 768w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_960/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 960w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1120/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1120w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_1536/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 1536w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2240/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2240w, https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0 2624w" src="https://res.cloudinary.com/imagist/image/fetch/f_auto/q_auto/c_scale,w_2624/https://todoist.com/static/home-teams/stats/stat-box-4.png?_a=ATCqVcY0"/></div><div class="stats-box_statsBoxTextContainer__Xgj3s"><p class="Z2j5FoeQ_umI7vX0SmxF Gs7wgIm1muuNtpJsHwaa">1 million+</p><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">Pro users</p></div></div></div><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV odtOENRM8nO67fi6A2f8 o9DYmt4xfLaImiVzI9dQ stats-section_articleLink__C0Fl5 mbs-16" rel="noopener noreferrer" href="https://blog.doist.com/no-exit-strategy/?utm_source=todoist&amp;utm_medium=home&amp;utm_campaign=new_td_landing_page_c2205" target="_blank">Read about our long-term mission</a></div></div></div><div class="prefooter_background__cPq_a"><div class="prefooter_container___BJxW md-pbs-192 pbs-128 YttEe7kIjjIAtcbhghld"><h2 class="Z2j5FoeQ_umI7vX0SmxF L29FjGZVki0rW0QIhG_A mWJbs2TuAw9nS7uYCe19">Gain calmness and clarity with the world’s most beloved productivity app</h2><p class="Z2j5FoeQ_umI7vX0SmxF VB6LgUAmqv1DrUQhn1Tq ghjFWYpaMMS6gFyyKavs">337,000+ ★★★★★ reviews on Google Play and App Store</p><div class="prefooter_buttons__C1Edr"><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo DLF4ip7391hTQFmMhXrA AisLsJaE_AWnIhDlnTUV cdc4_xoyu5lt350lFjqA o9DYmt4xfLaImiVzI9dQ" href="/auth/signup">Get started free</a><a class="Z2j5FoeQ_umI7vX0SmxF fIU_pyh7amL7_gGAWdA7 AisLsJaE_AWnIhDlnTUV fiaIW8EzjGBgQZzGxp9a IEtzmWgJUMZf9_fMKnhx PGgZjaWFAKPSXdn5Faog" href="/downloads"><svg viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" class="fcno40qhmCgDkMq5y3Tk"><path d="M7.47 10.53c.3.3.77.3 1.06 0l3-3a.75.75 0 1 0-1.06-1.06L8.75 8.2V2a.75.75 0 1 0-1.5 0v6.2L5.53 6.46a.75.75 0 0 0-1.06 1.06l3 3Z"></path><path d="M1 10.25c.41 0 .75.34.75.75v1c0 .7.56 1.25 1.25 1.25h10c.7 0 1.25-.56 1.25-1.25v-1a.75.75 0 0 1 1.5 0v1A2.75 2.75 0 0 1 13 14.75H3A2.75 2.75 0 0 1 .25 12v-1c0-.41.34-.75.75-.75Z"></path></svg>Download apps</a></div></div></div></main><footer class="pbs-96 md-pbs-128 MXtus134DS2wrEDs2ROV _d57SGn8vOubB9hlfp6Y" style="background-color:var(--product-ui-background-antique)"><div class="mJhiVUepQlh3t2sM5K9e YttEe7kIjjIAtcbhghld BNiOPRzcZXhZrycvcnLa" style="--hairline-color:var(--ui-border)"><div class="iTrmyjlwfZjq93__YwbZ"><a class="Z2j5FoeQ_umI7vX0SmxF SjnnY1xZKQ3O3YyVHw3D OEsFnI6y_oUfzgMNpsxQ" aria-label="Home" href="/home"><div class="ZBX6ji69IqUYUnnbG9hO"><div class="JDguX5oZL3ITNTthPuWx"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 32" fill="none" preserveAspectRatio="xMinYMid slice" height="32" class="Q50myWJrCdcY1FP3c1OV"><rect width="32" height="32" fill="var(--display-onlight-primary)" rx="5.12"></rect><path fill="var(--product-ui-background-antique)" d="m6.764 14.993 6.374-3.668.008-.005 6.568-3.78c.277-.16.29-.65-.02-.828l-.217-.124c-.317-.18-.727-.414-.902-.516a1.02 1.02 0 0 0-.997.012c-.155.09-10.501 6.038-10.847 6.235a1.349 1.349 0 0 1-1.339 0L-.072 9.144v2.699l.056.032c1.364.795 4.592 2.675 5.382 3.12.479.27.937.264 1.398-.002Z"></path><path fill="var(--product-ui-background-antique)" d="m6.764 20.385 6.366-3.664.024-.014 6.56-3.775c.277-.16.29-.651-.02-.828l-.217-.124c-.316-.18-.727-.414-.902-.516a1.02 1.02 0 0 0-.997.012c-.155.089-10.501 6.038-10.847 6.234a1.349 1.349 0 0 1-1.339 0c-.326-.188-5.464-3.174-5.464-3.174v2.698l.056.033c1.365.795 4.592 2.674 5.382 3.12.479.27.937.264 1.398-.002Z"></path><path fill="var(--product-ui-background-antique)" d="m13.139 22.108-6.375 3.669c-.461.266-.92.272-1.398.002-.79-.446-4.017-2.325-5.382-3.12l-.056-.033v-2.698l5.464 3.174c.413.239.925.236 1.339 0 .346-.196 10.692-6.145 10.847-6.235a1.02 1.02 0 0 1 .997-.012 125.007 125.007 0 0 0 1.12.64c.31.178.296.669.019.829l-6.575 3.784Z"></path><g><path fill="var(--display-onlight-primary)" d="M55.65 18.73c0 .515.089 1.015.264 1.492.176.481.432.904.774 1.273.342.37.751.664 1.23.884.48.221 1.025.331 1.632.331.608 0 1.152-.11 1.631-.33a3.768 3.768 0 0 0 2.005-2.158c.173-.477.26-.977.26-1.492s-.087-1.015-.26-1.494a3.779 3.779 0 0 0-.774-1.271 3.863 3.863 0 0 0-1.23-.885 3.865 3.865 0 0 0-1.632-.333c-.607 0-1.152.113-1.631.333-.48.221-.889.516-1.23.885a3.74 3.74 0 0 0-.775 1.27c-.175.48-.263.98-.263 1.495Zm-3.316 0c0-1.05.19-2.005.567-2.862a6.665 6.665 0 0 1 1.535-2.198 6.78 6.78 0 0 1 2.293-1.411 8 8 0 0 1 2.821-.497c.995 0 1.935.166 2.82.497a6.81 6.81 0 0 1 2.294 1.41 6.689 6.689 0 0 1 1.535 2.199c.378.857.567 1.811.567 2.862 0 1.05-.19 2.005-.567 2.862a6.688 6.688 0 0 1-1.535 2.198A6.766 6.766 0 0 1 62.37 25.2a7.934 7.934 0 0 1-2.819.497 7.946 7.946 0 0 1-2.821-.497 6.735 6.735 0 0 1-2.293-1.409 6.664 6.664 0 0 1-1.535-2.198c-.378-.857-.567-1.811-.567-2.862ZM71.63 18.734c0 .515.087 1.015.263 1.492.175.481.431.904.773 1.273.342.37.752.664 1.231.884.48.22 1.024.331 1.631.331.608 0 1.152-.11 1.632-.33a3.762 3.762 0 0 0 2.005-2.158 4.35 4.35 0 0 0 .26-1.492c0-.515-.087-1.015-.26-1.494a3.772 3.772 0 0 0-2.005-2.156 3.864 3.864 0 0 0-1.632-.333c-.607 0-1.152.113-1.63.333a3.86 3.86 0 0 0-1.232.885c-.341.369-.598.792-.773 1.27-.176.48-.264.98-.264 1.495Zm7.852 4.644h-.057c-.479.812-1.122 1.402-1.934 1.77a6.292 6.292 0 0 1-2.626.552c-1.033 0-1.949-.178-2.752-.538a6.162 6.162 0 0 1-2.059-1.48 6.311 6.311 0 0 1-1.3-2.212 8.26 8.26 0 0 1-.441-2.736 7.8 7.8 0 0 1 .47-2.738 6.813 6.813 0 0 1 1.312-2.212 6.076 6.076 0 0 1 2.031-1.478c.794-.36 1.66-.54 2.6-.54.627 0 1.18.065 1.66.193.479.13.902.295 1.27.5a4.807 4.807 0 0 1 1.575 1.325h.084V6.473c0-.331.263-.722.724-.722h1.873c.434 0 .722.364.722.722v18.173c0 .462-.391.723-.722.723h-1.705a.732.732 0 0 1-.725-.721v-1.27ZM88.157 18.73c0 .515.088 1.015.264 1.492.175.481.432.904.774 1.273a3.85 3.85 0 0 0 1.23.884c.48.221 1.024.331 1.632.331.607 0 1.152-.11 1.631-.33a3.763 3.763 0 0 0 2.005-2.158c.173-.477.26-.977.26-1.492s-.087-1.015-.26-1.494a3.774 3.774 0 0 0-2.005-2.156 3.866 3.866 0 0 0-1.631-.333c-.608 0-1.153.113-1.632.333-.479.221-.888.516-1.23.885-.342.369-.599.792-.774 1.27-.176.48-.264.98-.264 1.495Zm-3.316 0c0-1.05.189-2.005.567-2.862a6.663 6.663 0 0 1 1.534-2.198 6.78 6.78 0 0 1 2.293-1.411 8 8 0 0 1 2.822-.497c.994 0 1.935.166 2.819.497a6.81 6.81 0 0 1 2.295 1.41 6.689 6.689 0 0 1 1.534 2.199c.378.857.568 1.811.568 2.862 0 1.05-.19 2.005-.567 2.862a6.688 6.688 0 0 1-1.535 2.198 6.766 6.766 0 0 1-2.295 1.409 7.934 7.934 0 0 1-2.82.497 7.946 7.946 0 0 1-2.82-.497 6.736 6.736 0 0 1-2.294-1.409 6.662 6.662 0 0 1-1.534-2.198c-.378-.857-.567-1.811-.567-2.862ZM100.945 7.588c0-.535.198-.999.594-1.398.398-.395.9-.594 1.507-.594.608 0 1.121.19 1.535.568.414.378.623.852.623 1.424a1.85 1.85 0 0 1-.623 1.424c-.414.378-.927.567-1.535.567-.607 0-1.109-.198-1.507-.596-.396-.396-.594-.86-.594-1.395ZM114.64 15.77c-.331 0-.575-.25-.616-.359-.276-.723-1.155-.994-1.865-.994-1.119 0-1.997.519-1.997 1.41 0 .863.85 1.04 1.375 1.199.576.174 1.677.414 2.284.557a7.419 7.419 0 0 1 1.728.636c1.761.915 2.012 2.354 2.012 3.22 0 3.197-3.167 4.257-5.366 4.257-1.695 0-4.879-.257-5.578-3.488-.068-.315.21-.798.721-.798h1.832c.36 0 .603.263.674.47.235.649.983 1.14 2.245 1.14 1.353 0 2.153-.537 2.153-1.251 0-.462-.261-.872-.603-1.104-1.026-.696-3.564-.774-4.942-1.508-.528-.28-1.852-.922-1.852-3.109 0-3.015 2.741-4.286 5.149-4.286 3.551 0 4.854 2.243 5.001 3.075.081.459-.176.934-.692.934h-1.663ZM117.833 14.129v-1.373c0-.327.258-.721.717-.721h1.769v-3.37c0-.36.244-.58.429-.66l1.89-.825c.552-.227.999.228.999.666v4.189h2.928c.453 0 .722.395.722.721v1.375a.745.745 0 0 1-.721.723h-2.929v5.808c0 .663-.018 1.182.235 1.565.233.351.574.482 1.257.482.196 0 .371-.033.519-.083a.706.706 0 0 1 .868.317c.216.418.463.877.636 1.206.191.361.037.825-.311.993-.561.273-1.339.494-2.406.494-.884 0-1.385-.096-1.945-.29a3.347 3.347 0 0 1-1.417-1c-.324-.396-.484-.926-.604-1.516-.122-.59-.15-1.304-.15-2.08v-5.896h-1.765c-.463 0-.721-.4-.721-.725ZM41.928 14.129v-1.373c0-.327.259-.721.717-.721h2.021v-3.37c0-.36.245-.58.43-.66l1.89-.825c.552-.227.999.228.999.666v4.189h2.928c.452 0 .722.395.722.721v1.375a.745.745 0 0 1-.722.723h-2.928v5.808c0 .663-.018 1.182.235 1.565.232.351.573.482 1.257.482.196 0 .37-.033.519-.083a.706.706 0 0 1 .867.317c.217.418.464.877.637 1.206.19.361.037.825-.311.993-.562.273-1.34.494-2.406.494-.884 0-1.385-.096-1.945-.29a3.351 3.351 0 0 1-1.418-1c-.324-.396-.484-.926-.603-1.516-.122-.59-.15-1.304-.15-2.08v-5.896H42.65c-.463 0-.722-.4-.722-.725ZM102.115 25.37h1.876a.723.723 0 0 0 .721-.723v-11.89a.723.723 0 0 0-.721-.722h-1.876a.724.724 0 0 0-.721.722v11.89c0 .398.325.722.721.722Z"></path></g></svg></div><div class="nXWXUhDvwGosQscGvXZK"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none" preserveAspectRatio="xMinYMid slice" height="32" class="Q50myWJrCdcY1FP3c1OV"><rect width="32" height="32" fill="var(--display-onlight-primary)" rx="5.12"></rect><path fill="var(--product-ui-background-antique)" d="m6.764 14.993 6.374-3.668.008-.005 6.568-3.78c.277-.16.29-.65-.02-.828l-.217-.124c-.317-.18-.727-.414-.902-.516a1.02 1.02 0 0 0-.997.012c-.155.09-10.501 6.038-10.847 6.235a1.349 1.349 0 0 1-1.339 0L-.072 9.144v2.699l.056.032c1.364.795 4.592 2.675 5.382 3.12.479.27.937.264 1.398-.002Z"></path><path fill="var(--product-ui-background-antique)" d="m6.764 20.385 6.366-3.664.024-.014 6.56-3.775c.277-.16.29-.651-.02-.828l-.217-.124c-.316-.18-.727-.414-.902-.516a1.02 1.02 0 0 0-.997.012c-.155.089-10.501 6.038-10.847 6.234a1.349 1.349 0 0 1-1.339 0c-.326-.188-5.464-3.174-5.464-3.174v2.698l.056.033c1.365.795 4.592 2.674 5.382 3.12.479.27.937.264 1.398-.002Z"></path><path fill="var(--product-ui-background-antique)" d="m13.139 22.108-6.375 3.669c-.461.266-.92.272-1.398.002-.79-.446-4.017-2.325-5.382-3.12l-.056-.033v-2.698l5.464 3.174c.413.239.925.236 1.339 0 .346-.196 10.692-6.145 10.847-6.235a1.02 1.02 0 0 1 .997-.012 125.007 125.007 0 0 0 1.12.64c.31.178.296.669.019.829l-6.575 3.784Z"></path></svg></div></div></a><p class="Z2j5FoeQ_umI7vX0SmxF Y5eL4cjJHcHaCQ8EbL7V ghjFWYpaMMS6gFyyKavs">Join millions of people who organize work and life with Todoist.</p></div><div class="JBVd9xPdHa6T2HcOw9nl"><div class="lWbjERyt2pLGn3F9mPqi"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA TZubjRgryCWQXB67QkAP">Features</p><ol class="b7MGHZeFYj8Es7O3Y5FG"><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/features">How It Works<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/business">For Teams<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/pricing">Pricing<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/templates">Templates<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li></ol></div><div class="lWbjERyt2pLGn3F9mPqi"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA TZubjRgryCWQXB67QkAP">Resources</p><ol class="b7MGHZeFYj8Es7O3Y5FG"><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/downloads">Download Apps<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/help?utm_source=todoist&amp;utm_medium=landing_page&amp;utm_campaign=home">Help Center<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/productivity-methods">Productivity Methods<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/integrations">Integrations<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/channelpartners">Channel Partners<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="https://developer.todoist.com">Developer API<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="https://status.todoist.com/">Status<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li></ol></div><div class="lWbjERyt2pLGn3F9mPqi"><p class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc DLF4ip7391hTQFmMhXrA TZubjRgryCWQXB67QkAP">Company</p><ol class="b7MGHZeFYj8Es7O3Y5FG"><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="https://doist.com?utm_source=todoist&amp;utm_medium=landing_page&amp;utm_campaign=home">About Us<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="https://doist.com/jobs?utm_source=todoist&amp;utm_medium=landing_page&amp;utm_campaign=home">Careers<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="/inspiration?utm_source=todoist&amp;utm_medium=landing_page&amp;utm_campaign=home">Inspiration Hub<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="https://doist.com/press/?utm_source=todoist&amp;utm_medium=landing_page&amp;utm_campaign=home">Press<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li><li class="BMzxjIUzYbp1Q25OJjHV"><a class="Z2j5FoeQ_umI7vX0SmxF zA288Pg0ZRE8YcTi8CRc AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR IESvGIboWqfsXKFfl5m1" href="https://twist.com/?utm_source=todoist&amp;utm_medium=landing_page&amp;utm_campaign=home">Twist<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" class="T4V9y6v2rlu3n550XIYd"><path fill-rule="evenodd" d="M6.47 3.47a.75.75 0 0 0 0 1.06L9.94 8l-3.47 3.47a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 0z" clip-rule="evenodd"></path></svg></a></li></ol></div><div class="UZBe4HG8k_xSdw13rsgB"><ul class="zIzWA00Iqj66gojcYj49"><li><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ pHhuYvJY2LjocMtj5pZv" aria-label="Todoist on Twitter" href="https://twitter.com/todoist"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M22.393 3.339a8.874 8.874 0 0 1-2.868 1.121A4.452 4.452 0 0 0 16.23 3c-2.49 0-4.512 2.072-4.512 4.628 0 .363.039.715.116 1.054-3.75-.193-7.076-2.034-9.304-4.837a4.711 4.711 0 0 0-.61 2.329c0 1.605.796 3.022 2.008 3.852a4.424 4.424 0 0 1-2.046-.577v.056c0 2.244 1.556 4.115 3.622 4.539a4.305 4.305 0 0 1-1.19.162c-.29 0-.574-.027-.849-.081.575 1.838 2.24 3.177 4.216 3.212A8.91 8.91 0 0 1 1 19.256a12.564 12.564 0 0 0 6.919 2.077c8.303 0 12.842-7.05 12.842-13.167 0-.202-.004-.403-.011-.6A9.269 9.269 0 0 0 23 5.17a8.84 8.84 0 0 1-2.592.729 4.621 4.621 0 0 0 1.985-2.56z"></path></svg></a></li><li><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ pHhuYvJY2LjocMtj5pZv" aria-label="Todoist on YouTube" href="https://www.youtube.com/channel/UCQ_61yRKscCnkIJBPoR15EA"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M3.598 4.242C6.958 4 11.995 4 11.995 4h.01s5.038 0 8.396.242l.155.016c.515.05 1.427.138 2.25.995.72.725.954 2.371.954 2.371S24 9.557 24 11.49v1.812c0 1.933-.24 3.866-.24 3.866s-.234 1.646-.954 2.371c-.823.858-1.735.946-2.25.996-.057.005-.108.01-.155.016-3.358.241-8.401.249-8.401.249s-6.24-.057-8.16-.24c-.091-.017-.202-.03-.327-.045-.609-.073-1.562-.187-2.32-.976-.719-.725-.953-2.37-.953-2.37S0 15.234 0 13.301V11.49c0-1.933.24-3.866.24-3.866s.234-1.646.954-2.37c.823-.858 1.735-.947 2.25-.996.057-.006.108-.01.154-.016zm12.408 7.912L9.521 8.787l.001 6.711 6.484-3.344z" fill-rule="evenodd" clip-rule="evenodd"></path></svg></a></li><li><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ pHhuYvJY2LjocMtj5pZv" aria-label="Todoist on Facebook" href="https://facebook.com/todoist"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M23 12.067C23 5.955 18.075 1 12 1S1 5.955 1 12.067C1 17.591 5.023 22.17 10.281 23v-7.734H7.488v-3.199h2.793V9.63c0-2.774 1.643-4.306 4.155-4.306 1.203 0 2.462.216 2.462.216v2.724h-1.387c-1.366 0-1.792.853-1.792 1.73v2.074h3.05l-.487 3.2h-2.563V23C18.977 22.17 23 17.591 23 12.067z"></path></svg></a></li><li><a class="Z2j5FoeQ_umI7vX0SmxF RoZJQRuSAywd550zWiXo AisLsJaE_AWnIhDlnTUV yJmXDmy7f2C2dFexmqOR o9DYmt4xfLaImiVzI9dQ pHhuYvJY2LjocMtj5pZv" aria-label="Todoist on Instagram" href="https://www.instagram.com/todoistofficial"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path fill-rule="evenodd" d="M6.608 12a5.392 5.392 0 1 1 10.784 0 5.392 5.392 0 0 1-10.784 0zM12 15.5a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7z" clip-rule="evenodd"></path><path d="M17.605 7.655a1.26 1.26 0 1 0 0-2.52 1.26 1.26 0 0 0 0 2.52z"></path><path fill-rule="evenodd" d="M12 1.5c-2.852 0-3.21.012-4.33.063-1.117.051-1.88.229-2.548.488a5.146 5.146 0 0 0-1.86 1.211 5.146 5.146 0 0 0-1.21 1.86c-.26.668-.438 1.431-.489 2.549C1.513 8.79 1.5 9.148 1.5 12c0 2.852.012 3.21.063 4.33.051 1.117.229 1.88.488 2.548.269.69.628 1.276 1.211 1.86.584.583 1.17.942 1.86 1.21.668.26 1.431.438 2.549.489 1.12.05 1.477.063 4.329.063 2.852 0 3.21-.012 4.33-.063 1.117-.051 1.88-.229 2.548-.488a5.149 5.149 0 0 0 1.86-1.211 5.149 5.149 0 0 0 1.21-1.86c.26-.668.438-1.431.489-2.549.05-1.12.063-1.477.063-4.329 0-2.852-.012-3.21-.063-4.33-.051-1.117-.229-1.88-.488-2.548a5.148 5.148 0 0 0-1.211-1.86 5.147 5.147 0 0 0-1.86-1.21c-.668-.26-1.431-.438-2.549-.489C15.21 1.513 14.852 1.5 12 1.5zm0 1.892c2.804 0 3.136.01 4.243.061 1.024.047 1.58.218 1.95.362.49.19.84.418 1.207.785.367.368.595.717.785 1.207.144.37.315.926.362 1.95.05 1.107.061 1.44.061 4.243 0 2.804-.01 3.136-.061 4.243-.047 1.024-.218 1.58-.362 1.95-.19.49-.418.84-.785 1.207a3.254 3.254 0 0 1-1.207.785c-.37.144-.926.315-1.95.362-1.107.05-1.44.061-4.243.061-2.804 0-3.136-.01-4.243-.061-1.024-.047-1.58-.218-1.95-.362-.49-.19-.84-.418-1.207-.785a3.253 3.253 0 0 1-.785-1.207c-.144-.37-.315-.926-.362-1.95-.05-1.107-.061-1.44-.061-4.243 0-2.804.01-3.136.061-4.243.047-1.024.218-1.58.362-1.95.19-.49.418-.84.785-1.207a3.253 3.253 0 0 1 1.207-.785c.37-.144.926-.315 1.95-.362 1.107-.05 1.44-.061 4.243-.061z" clip-rule="evenodd"></path></svg></a></li></ul></div></div></div><div class="kJ_P1SL9ZvC1wLstHbqp" style="background-color:var(--product-ui-background-antique)"><div class="GHxray4ydudJBMpJdMPS YttEe7kIjjIAtcbhghld BNiOPRzcZXhZrycvcnLa"><div class="VxijLRKqoSQVEzALqkgZ"><ul class="DFwZNR0zYDpb7fqUM3o6"><a class="Z2j5FoeQ_umI7vX0SmxF tH0z6dflaPdI1YyOhjCF" href="/security">Security</a><a class="Z2j5FoeQ_umI7vX0SmxF tH0z6dflaPdI1YyOhjCF" href="/privacy">Privacy</a><a class="Z2j5FoeQ_umI7vX0SmxF tH0z6dflaPdI1YyOhjCF" href="/terms">Terms</a></ul><p class="Z2j5FoeQ_umI7vX0SmxF tH0z6dflaPdI1YyOhjCF">© Doist Inc.</p></div><div class="pGaQBhZ1Qh3tUas7U3QJ"><div class=""><div class=""><div class="vTIN3fP7nNhIbeK_N3YV" style="--stack:var(--space-12)"><div class="yfJzOw4KLuIxWXg2L1RV hCYLYFRPa7x1YWWmBOQT dJ5vG7SdSqW18a6awhAX"><div class="f1UEDh2juopQJOFpTNtO"><svg viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.012 3.14a5.249 5.249 0 0 0-3.208 4.11h2.46c.058-1.424.275-2.723.61-3.73.043-.13.09-.256.138-.38ZM8 1.25a6.75 6.75 0 1 0 0 13.5 6.75 6.75 0 0 0 0-13.5Zm0 1.505a.647.647 0 0 0-.19.18c-.165.21-.346.56-.513 1.06-.277.832-.475 1.965-.53 3.255h2.467c-.056-1.29-.254-2.423-.531-3.256-.167-.5-.348-.849-.514-1.059A.647.647 0 0 0 8 2.755Zm2.735 4.495c-.057-1.424-.274-2.723-.61-3.73a7.557 7.557 0 0 0-.137-.38 5.25 5.25 0 0 1 3.208 4.11h-2.46Zm-1.501 1.5H6.766c.056 1.289.254 2.422.531 3.255.167.5.348.849.514 1.059.096.122.16.166.189.18a.647.647 0 0 0 .19-.18c.165-.21.346-.56.513-1.06.277-.832.475-1.965.53-3.254Zm-3.222 4.108a7.476 7.476 0 0 1-.138-.379c-.335-1.006-.552-2.306-.61-3.73h-2.46a5.25 5.25 0 0 0 3.208 4.11Zm3.976 0c.049-.123.095-.25.138-.379.335-1.006.552-2.306.61-3.73h2.46a5.25 5.25 0 0 1-3.208 4.11Z"></path></svg></div><select class="DaZiETNVTwsEP7Ky_aTl Z2j5FoeQ_umI7vX0SmxF V0mB2BLv4MZSojdU0DJU zW1zRZ8jOBjHSOiU5mJP qp2mWWXVKuG2VN5YPA2F" id="language-picker" aria-describedby="language-picker-message language-picker-description" aria-label="Select language"><option value="cs">Čeština</option><option value="da">Dansk</option><option value="de">Deutsch</option><option value="en" selected="">English</option><option value="es">Español</option><option value="fi">Suomi</option><option value="fr">Français</option><option value="it">Italiano</option><option value="ja">日本語</option><option value="ko">한국어</option><option value="nb">Norsk</option><option value="nl">Nederlands</option><option value="pl">Polski</option><option value="pt-BR">Português (Brazil)</option><option value="ru">Pусский (Russian)</option><option value="sv">Svenska</option><option value="tr">Türkçe</option><option value="zh-CN">中文 (简体)</option><option value="zh-TW">中文 (繁體)</option></select><span class="Pva1um76EjjNI_RQc8FE" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8 2.25c.21 0 .41.1.55.25l2.75 3a.75.75 0 0 1-1.1 1L8 4.12l-2.2 2.4A.75.75 0 0 1 4.7 5.5l2.75-3A.75.75 0 0 1 8 2.25Zm-3.26 7.2a.75.75 0 0 1 1.06.05L8 11.9l2.2-2.4a.75.75 0 0 1 1.1 1l-2.75 3a.75.75 0 0 1-1.1 0l-2.75-3a.75.75 0 0 1 .04-1.05Z"></path></svg></span></div></div></div></div></div></div></div></footer></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"_sentryTraceData":"3b529ee5063e4f8bb942ae5e1a33291e-bd8d838fe8babfe5-0","_sentryBaggage":"sentry-environment=production,sentry-release=tjRfPRPy4aH1G4B1hKB1F,sentry-transaction=%2F,sentry-public_key=21c438116884488993d944bb643cb906,sentry-trace_id=3b529ee5063e4f8bb942ae5e1a33291e,sentry-sample_rate=0","webpSupport":false,"isAuthenticated":false,"cookies":{},"currency":"USD","freePlanType":"free_old","_nextI18Next":{"initialI18nStore":{"en":{"common":{"getStarted":"Get Started","downloadMacStore":"Download on the Mac App Store","downloadAppStore":"Download on the App Store","downloadGooglePlay":"Get it on Google Play","downloadMicrosoft":"Get it from Microsoft","getApp":"Get the app","signUpInSeconds":"Sign up in seconds","seoTitle":"The Best To Do List App \u0026 Task Manager","seoDesc":"Millions of people trust Todoist to tame life’s chaos. Ranked by The Verge as the world’s best to do list app. Free on iOS, Android, macOS, Windows, \u0026 more.","seoOpenGraphTitle":"Todoist – The Best To Do List App \u0026 Task Manager","tryTodoist":"Try Todoist","home":"Home","templates":"Templates","features":"Features","premium":"Premium","forTeams":"For Teams","pricing":"Pricing","upgrade":"Upgrade","login":"Log in","signup":"Sign up","startForFree":"Start for free","openTodoist":"Open Todoist","todoistOnFacebook":"Todoist on Facebook","todoistOnTwitter":"Todoist on Twitter","todoistOnYoutube":"Todoist on YouTube","todoistOnInstagram":"Todoist on Instagram","selectLanguage":"Select your language","howItWorks":"How It Works","resources":"Resources","downloadApps":"Download Apps","helpCenter":"Help Center","integrations":"Integrations","integrationsDesc":"Connect Todoist with tools like IFTTT, Alexa, Google Calendar, and more...","developerApi":"Developer API","status":"Status","wunderlistAlternative":"Wunderlist alternative","company":"Company","aboutUs":"About Us","careers":"Careers","inspirationHub":"Inspiration Hub","press":"Press","twist":"Twist","new":"New","cookie":"This site uses cookies for analysis, as well as for personalized content and advertising. By continuing to browse this site, you are accepting this use.","joinMillionsPeople":"Join millions of people who organize work and life with Todoist.","security":"Security","privacy":"Privacy","terms":"Terms","shareOnFb":"Share on Facebook","shareOnTt":"Share on Twitter","shareOnMail":"Share by email","comingFromWunderlist":"Coming from Wunderlist?","importWunderlistTasks":"Import your Wunderlist tasks to Todoist","close":"Close","closeBanner":"Close banner","yearInReview":"Year in Review","productivityMethods":"Productivity Methods","gettingStartedGuides":"Getting Started Guide","gettingStartedGuidesDesc":"Everything you need to know to get your Todoist up and running in minutes.","helpCenterDesc":"Find answers to your questions and tips for getting the most out of your Todoist.","productivityMethodsPlusQuiz":"Productivity Methods + Quiz","productivityMethodsPlusQuizDesc":"Learn the most popular productivity methods and discover which one fits you best.","inspirationHubDesc":"Productivity advice you won‘t find anywhere else, plus Todoist tips and product news.","channelpartners":"Channel Partners","openOnTwitter":"Open on Twitter","boardsBannerText":"Introducing Boards: A more visual way to move your projects forward.","boardsBannerLink":"Learn more","openMenu":"Open menu","closeMenu":"Close menu","readBlog":"Read blog","search":"Search","clearSearch":"Clear search","previous":"Previous","next":"Next","uploadIndicator":{"uploading":"Uploading…","uploadCompleted":"Upload completed!","uploadFailed":"Upload failed!","removeFile":"Remove file","openPreview":"Open preview"}},"home-teams":{"seoTitle":"Todoist | A To-Do List to Organize Your Work \u0026 Life","seoDescription":"Trusted by 30 million people and teams. Todoist is the world's favorite task manager and to-do list app. Finally become focused, organized and calm.","seoImageAlt":"Organize work \u0026 life","heroTitle":"Organize your work and life, finally.","heroSubtitle":"Become focused, organized, and calm with Todoist. The world’s #1 task manager and to-do list app.","ctaButtonText":"Start for free","companyTitle":"30 million+ people and teams trust their sanity and productivity to Todoist","productuiScene1":{"preheader":"Clear your mind","title":"The fastest way to get tasks out of your head.","description":"Type just about anything into the task field and Todoist’s one-of-its-kind natural language recognition will instantly fill your to-do list."},"productuiScene2":{"preheader":"Focus on what’s important","title":"Reach that mental clarity you’ve been longing for.","description":"Your tasks are automatically sorted into Today, Upcoming, and custom Filter views to help you prioritize your most important work."},"productuiScene3":{"preheader":"Get it all done","title":"Where work and personal tasks can finally coexist.","description":"Tons of tasks, just one app. With workspaces, your personal, work, and team tasks can all live harmoniously under the same roof. (Sigh of relief)."},"complexitySlider":{"title":"“Todoist makes it easy to go as simple or as complex as you want”","titleAuthor":"– The Verge","linkToFeatures":"Explore more features","simple":"Simple","advanced":"Advanced","items":{"task":{"title":"Add a task","tooltip":"Step one…"},"completeIt":{"title":"Complete it","tooltip":"And now you're done!"},"dueDate":{"title":"Give it a due date","tooltip":"Like \"today\" or \"every weekday at 10am\""},"reminder":{"title":"Schedule a reminder","tooltip":"At a time of day or location"},"taskPriority":{"title":"Give tasks a priority level","tooltip":"With 4 color-coded levels"},"completeTheTask":{"title":"Complete the task","tooltip":"And now you're done!"},"subtasks":{"title":"Break it into subtasks","tooltip":"To make it more manageable"},"projects":{"title":"Move tasks into projects","tooltip":"With a simple drag \u0026 drop"},"shareProjects":{"title":"Share your projects","tooltip":"By adding someone via email"},"assignTasks":{"title":"Assign the tasks","tooltip":"To keep folks accountable"},"setupReminders":{"title":"Set up reminders","tooltip":"At a time of day or location"},"discussInComments":{"title":"Discuss in comments","tooltip":"To centralize conversations"},"completeTasks":{"title":"Complete tasks","tooltip":"And now you're done!"},"integrations":{"title":"Add some extensions","tooltip":"For your calendar, email, etc."},"filterViews":{"title":"Create filter views","tooltip":"To customize your workflow"}},"steps":{"easeIn":"Ease in","organize":"Organize","delegate":"Delegate","customize":"Customize"},"pro":"Pro"},"exploreTitle":"Explore all Todoist has to offer","exploreCards":{"features":"Features","templates":"Template gallery","quiz":"Productivity quiz","extensions":"Extension gallery","inspiration":"Inspiration hub"},"statsPreheader":"In it for the long haul","statsTitle":"A task manager you can trust for life","statsDescriptionYears":"We’ve been building Todoist for {{count}} year","statsDescriptionYears_other":"We’ve been building Todoist for {{count}} years","statsDescriptionDays":"and {{count}} day.","statsDescriptionDays_other":"and {{count}} days.","statsDescriptionRestAssured":"Rest assured that we’ll never sell out to the highest bidder.","statsButtonText":"Read about our long-term mission","statsBox1":{"title":"30+ million","desc":"app downloads"},"statsBox2":{"title":"2 billion+","desc":"tasks completed"},"statsBox3":{"title":"160+ countries","desc":"worldwide"},"statsBox4":{"title":"1 million+","desc":"Pro users"},"statsBox1Title30million":"30+ million","statsBox1Desc":"app downloads","statsBox2Title":"2 billion+","statsBox2Desc":"tasks completed","statsBox3Title160Countries":"160+ countries","statsBox3Desc":"worldwide","statsBox4Title":"1 million+","statsBox4DescProUsers":"Pro users","preFooter":{"title":"Gain calmness and clarity with the world’s most beloved productivity app","reviews_one":"{{reviews}} ★★★★★ review on Google Play and App Store","reviews_few":"{{reviews}}+ ★★★★★ reviews on Google Play and App Store","reviews_other":"{{reviews}}+ ★★★★★ reviews on Google Play and App Store","getStartedButtonText":"Get started free","downloadButtonText":"Download apps"}},"productui":{"play":"Play","pause":"Pause","permissionListItem":{"member":"Member"},"sideBar":{"favorites":"Favorites","workspaces":"Workspaces"},"taskAttributePill":{"dueDate":"Due date","today":"Today","tomorrow":"Tomorrow","tomorrowTime":"Tomorrow {{time}}","nextWeek":"Next week","thisWeekend":"This weekend","noDate":"No date","priority":"Priority","p1":"P1","p2":"P2","p3":"P3","p4":"P4","label":"Label","reminders":"Reminders","subtasks":"{{count}}/{{total}}"},"view":{"addProject":"Add project","view":"View","sortedPriority":"Sorted by priority"},"quickAdd":{"placeholders":{"taskName":"Task name","description":"Description"},"inbox":"Inbox","addTask":"Add task"},"sequence":{"quickadd":{"callAlex":"Call Alex","tomorrow":"tomorrow","reviewTraffic":"Review website traffic","everyMondayEightWeeks":"every Monday for 8 weeks","everyMondayPill":"Monday","readEmail":"Read work emails","everyDay":"every day","p1":"p1","expenseReport":"Do expense report","expenseReportWhen":"every other Friday starting Dec 1 ending June 1","expenseReportWhenPill":"1 Dec"},"todayView":{"yoga":"Do 30 minutes of yoga 🧘","shortcutUpdate":"Shortcut update","buyBread":"Buy bread 🍞","dentist":"Dentist appointment","todoistZero":"You reached #TodoistZero!"},"getItAllDone":{"workspaces":"Workspaces","personal":"Personal","team":"Team","fitness":"Fitness","groceries":"Groceries","appointments":"Appointments","newBrand":"New Brand","websiteUpdate":"Website Update","productRoadmap":"Product Roadmap","meetingAgenda":"Meeting Agenda"}}}}},"initialLocale":"en","ns":["common","home-teams","productui"],"userConfig":{"i18n":{"defaultLocale":"en","locales":["en","ru","fr","nl","pt-BR","zh-CN","ko","nb","de","sv","tr","it","da","pl","fi","zh-TW","ja","es","cs"],"localeDetection":true},"localePath":"public/static/locales","react":{"useSuspense":false},"trailingSlash":true,"returnNull":false,"default":{"i18n":{"defaultLocale":"en","locales":["en","ru","fr","nl","pt-BR","zh-CN","ko","nb","de","sv","tr","it","da","pl","fi","zh-TW","ja","es","cs"],"localeDetection":true},"localePath":"public/static/locales","react":{"useSuspense":false},"trailingSlash":true,"returnNull":false}}},"user":null,"userPlan":null,"pricingModel":null,"pricingModelV2":null,"absoluteUrl":"https://todoist.com/","featureFlags":{"flags":{"teams_public_beta":true,"teams_public_release":true,"test_ab":false},"identity":"visitor_5ae6721c-20b9-4c27-8f88-0d7a89f88a5a","expiry":1690748608951},"billingCycle":"yearly","isInAppBrowser":false,"query":{},"years":16,"days":182,"celebrationStatesSocialImg":null},"__N_SSP":true},"page":"/","query":{},"buildId":"tjRfPRPy4aH1G4B1hKB1F","isFallback":false,"gssp":true,"appGip":true,"locale":"en","locales":["en","ru","fr","nl","pt-BR","zh-CN","ko","nb","de","sv","tr","it","da","pl","fi","zh-TW","ja","es","cs"],"defaultLocale":"en","scriptLoader":[]}</script></body></html>

60. Deciding which Collection to Use

Notes:

  • The 2 main considerations when determining which type of data structure to use are: what you need the data structure to do, and what are the fastest/most efficient (e.g. in terms of insertion/deletion, retrieval, and traversal speeds) data structures for your purposes.
  • The 3 main groups of collections are Lists, Sets, and Maps, which are used the most often and are the most practical. There are other kinds of collections, such as Stacks and Queues, that are used occasionally and can also be quite useful at times.
  • Lists are a type of Generic collection that store ordered "lists" of objects (you can add elements to the end of the List by default, or add them to a specified index in the List), and each element in a List is marked with an index via an integer (zero-indexed, meaning start at 0, and increment by 1 for each consecutive element). Duplicates are allowed in Lists.
  • Checking if a particular element exists in a List is relatively slow (as the List has to traverse through itself to find it), accessing an element via index is fast due to the memory location of the element in the List being related to the index (memory location of the collection contains references to the memory locations of its elements), and iterating/traversing through a List is decently fast. The Collection class provides methods to sort Lists, and Lists can also be sorted via a custom method that reflects a type of sort (e.g. bubble sort, selection sort, etc.). Lists have 2 main sub-types: ArrayList and LinkedList.
  • Sets are a type of Generic collection that store only unique values, meaning they are useful for filtering out duplicate elements. They are not indexed (elements are accessed via iteration, or the Set is converted to a List then elements are accessed via index), and can either be ordered or un-ordered, depending on the sub-type you are using, which can be HashSet, LinkedHashSet, or TreeSet. Checking if a particular element exists in a Set is very fast due to the optimized built-in contains() method. When storing custom objects into Sets, the class of those objects needs to implement the hashCode() and equals() method, so that the Sets can determine whether or not 2 objects are distinct from each other.
  • Maps are a type of Generic collection that stores elements as key-value pairs, where the keys have the be unique, but there can be duplicate values. A Map is sort of like a lookup table, as it literally contains an internal hash table. Retrieving values by key in Maps is fast, since the hash table stores key-value pairs by index, and each index is related to the hash code of the key.
  • However, Maps are not really optimized for iteration, as iterating through Map keys is relatively fast (keys are associated with the indices and corresponding hash codes of the hash table, while values are not associated), but iterating through Map values is very slow. When storing custom objects as keys of Maps, the class of those objects needs to implement the hashCode() and equals() method, so that the Maps can determine whether or not 2 objects are distinct from each other. Maps can be ordered or un-ordered, depending on the sub-type, which can be HashMap, LinkedHashMap, or TreeMap.
  • Most types of Lists, Sets, and Maps are Generic types, meaning they take a parameterized data type that indicates the variable type of data they save within themselves.

Examples:

import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Set;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
import java.util.Map;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;

public class Application {
    public static void main(String[] args) {
        // Conventionally use grouping interface (e.g. List, Set, Map) as the variable type, and sub-type class as the object type (e.g. ArrayList, HashSet, HashMap)
        // The variable type accounts for just about all of its sub-types, which are used for the object type

        // Types of List
        // Use ArrayList if you only want to add and remove elements at the end of the List
        List<String> arrayList = new ArrayList<String>();

        // Use LinkedList if you want to add and remove elements anywhere else within the List
        List<String> linkedList = new LinkedList<String>();

        // Types of Set
        // Use HashSet if you want the Set to be unordered (order can change at random too)
        Set<String> hashSet = new HashSet<String>();

        // Use LinkedHashSet if you want the Set to maintain insertion order
        Set<String> linkedHashSet = new LinkedHashSet<String>();

        // Use TreeSet if you want the Set to sort elements in ascending natural order (numerically for numbers, alphabetically for words, alphanumerically for combined numbers and words, and custom-defined natural order for custom objects (must implement Comparable interface for classes of custom objects))
        Set<String> treeSet = new TreeSet<String>();

        // Types of Map
        // Use HashMap if you want the keys of the Map to be unordered (order is liable to change at random too)
        Map<String, String> hashMap = new HashMap<String, String>();

        // Use LinkedHashMap if you want the keys of the Map to maintain insertion order
        Map<String, String> linkedHashMap = new LinkedHashMap<String, String>();

        // Use TreeMap if you want the keys of the Map to be sorted in natural order - classes of custom objects must implement Comparable interface
        Map<String, String> treeMap = new TreeMap<String, String>();

        // Consider using SortedSet and SortedMap interfaces when applicable
    }
}

Application.main(null);

61. Complex Data Structures

Notes:

  • Usually, when obtaining data from resources such as files and databases, we would want to create a class that contains properties to hold the different kinds of data, then save objects of that class (each object represents an individual element of the resource, and each element has properties of data), along with each of their properties holding certain areas of the data from the resource, into a Generic Java collection that has a parameterized data type of the class variable type. However, sometimes, we do not necessary know how we should represent certain parts of the data from a resource in a class, such as when some parts of the data are more intricate (i.e. some of the data cannot be directly stored as Wrapper classes or Strings, but rather need to be represented as a data structure that possible stores other data structures) and we want to also represent the important relationships amongst the different data sets. This is where complex data structures come to use.
  • In Java, a complex data structure is typically a data structure that stores and combines other objects and data structures within itself, and is sometimes sort of like a nested collection; for example, a Map that contains Sets as its values (with Set and its parameterized type defined in the Map's value parameterized type). A complex data structure essentially combines multiple instances of other data structures, and can come in numerous forms such as a List of Lists or an array of arrays. Complex data structures are mainly used to represent and manage more intricate data sets and the relationships amongst them, effectively enabling greater abstraction (reduce data complexity and increase efficiency and readability), as well as more efficient and advanced data management.

Examples:

import java.util.Map;
import java.util.Set;
import java.util.HashMap;
import java.util.LinkedHashSet;

public class Application {
    // Make arrays static, so that they can be accessed directly within the static main() method without creating an object of the Application class
    // Use example with arrays to represent JSON data that you would typically get from resources such as files and databases
    public static String[] vehicles = {
        "ambulance", "helicopter", "lifeboat"
    };

    public static String[][] drivers = {
        {"Fred", "Sue", "Pete"},
        {"Sue", "Richard", "Bob", "Fred"},
        {"Pete", "Mary", "Bob"}
    };

    public static void main(String[] args) {
        // The scenario here is that the first row of drivers can operate the ambulance, the second row can operate the helicopter, and the third row can operate the lifeboat
        // In each row, the first person (0th index) has the highest precedence of driving their assigned vehicle, but if they are not available, the second person takes precedence, and so on
        
        // Example of a complex data structure, where the Map takes keys of parameterized type String, but also values of parameterized type Set, which in turn has parameterized type String
        // So basically, a complex data structure in this case is sort of like a nested collection, where a Map is storing Sets within it. The key here represents the vehicle, and the corresponding value represents the unique set of eligible drivers
        // Use Map then parameterized Set interfaces for variable type in order to account for different types of Maps and Sets, then specify HashMap class for object type but still with parameterized Set interface, since we need to define the type of class for the Map object, but we do not need to define the type of Set yet as it is still just a parameterized variable type
        Map<String, Set<String>> personnel = new HashMap<String, Set<String>>();

        // Use length to get size of array, but use size() to get size of Generic collections such as Lists and Sets
        // Append appropriate key-value pairs to the Map, according to the scenario described earlier
        for (int i = 0; i < vehicles.length; i++) {
            String vehicle = vehicles[i];
            String[] driverList = drivers[i];

            // Specify LinkedHashSet class for the Set type, since we are creating a Set object here, and we want to maintain array/insertion order
            Set<String> driverSet = new LinkedHashSet<String>();
            for (String driver : driverList) {
                driverSet.add(driver);
            }

            // Vehicle as key, and set of corresponding unique eligible drivers as value
            personnel.put(vehicle, driverSet);
        }

        // Put this block of code in a manual pair of curly brackets, which manually scopes this code block to between the brackets
        // This allows us to use the variable names defined within this code block outside the manually-defined scope
        {
            // Get one particular Set of drivers for a specified vehicle from the Map
            // Can use driverList as variable name again because it is outside the scope of the previously defined driverList variable
            Set<String> driverList = personnel.get("helicopter");
            for (String driver : driverList) {
                System.out.println("Eligible driver: " + driver);
            }
        }
        System.out.println();

        // Iterate through keys and corresponding values of the Map, which in this case can be considered a complex data structure
        // keySet() method creates an unordered Set of all of the unique keys in the HashMap
        for (String vehicle : personnel.keySet()) {
            System.out.print(vehicle + ": ");
            Set<String> driverList = personnel.get(vehicle);

            for (String driver : driverList) {
                System.out.print(driver + " ");
            }
            System.out.println();
        }
    }
}

Application.main(null);
Eligible driver: Sue
Eligible driver: Richard
Eligible driver: Bob
Eligible driver: Fred

helicopter: Sue Richard Bob Fred 
lifeboat: Pete Mary Bob 
ambulance: Fred Sue Pete 

62. General Tips for Computer Science Jobs and Coding

Notes:

  • You do not necessarily need a degree to obtain a computer programming job, but having one certainly helps as it causes employers to take you more seriously.
  • Experience is important for obtain a computer science job. If you lack experience, the first several steps you may want to take is becoming proficient in core computer programming languages, successfully developing tangible personal projects that demonstrate a large variety of skills (e.g. Frontend, Backend), and sometimes even gain monetization on your software (this counts as commercial experience, which means experience in a business environment). At the end of the day, commercial experiences such as internships and previous work experiences are very useful for your job application.
  • The CV, or Curriculum Vitae, is a tangible list of a job applicant's accomplishments (or a summary of their professional career), which can include their education, projects, awards, activities, and professional/commercial experiences. It is key to make your CV unique, and contain as many valuable and interesting experiences (do not necessarily always have to relate to computer science) as possible, in order to attract potential employers.
  • An effective strategy for finding a good job: first create an honest, attractive, and unique CV, then use a job search website such as Indeed (to find multitude of job postings) or LinkedIn (to publicize your skills for companies to see) to post your resume/CV, filter the type jobs you want (e.g. skills and academics needed, pay rate, technology sector, etc.), and allow successful businesses to discover you. Apply to multiple jobs that fit your criteria, and if you are just starting off, try to look for entry-level jobs to gain at least some sort of experience, then build up your experience from there, and gradually achieve higher-level job positions.
  • Keep in mind that it sometimes takes companies a while to respond back to you when you submit a job application (either via a job search website or directly to the company itself). You will not always get a job interview, but when you do, make the best out of it and present your greatest qualities to the interviewer.
  • 10 tips to become a better computer programmer overall:
    1. Learn to touch type (type without looking at the keys).
    2. Name variables and methods descriptively (name should be concise but still descriptive enough).
    3. Type rather than read (hands-on programming can help you learn more than reading tutorials, although tutorials are occasionally useful and are present in college courses. Try to keep a balance between listening to lectures and practicing your coding abilities).
    4. Write software that interests you (passion projects).
    5. Read stack traces (error messages) from the top line down.
    6. Aim to write the smallest-working program possible, then once you get it working you can expand on it and make the code more complicated.
    7. Google like crazy when you have questions (use Chat-GPT in this day and age).
    8. Build programs one step at a time (e.g. work on one feature at a time, making sure that every feature works properly before you move on to the next).
    9. Ensure braces (keep track of the corresponding close bracket of each open bracket).
    10. Format code correctly (e.g. indents, brackets, code-readability, etc.). Also keep your code as concise as possible while still accomplishing the intended purpose (e.g. use methods that can be called multiple times within your code, so that you don't have repeat code throughout the program, use Java libraries such as Lombok to reduce boilerplate code (code that needs to be included in many places without much alteration in order for the program to run smoothly, such as getters and setters for variables, constructors, or built-in methods like hashCode() and equals()), developing more efficient and effective algorithms that use less code but still accomplish the required task, etc.).

63. Lambda Expressions

Notes:

  • In Java, lambda expressions (introduced in Java 8) essentially represent a single-method interface by utilizing a functional interface, which is an interface that contains only one abstract method, but can have multiple instance or static methods. Lambda expressions are also known as lambda functions or anonymous methods, because they basically provide a method that does not have a name, but still has code functionality. Lambda expressions enable the ability to instantiate a functional interface and define the implementation of its abstract method in a concise way. Lambda expressions have a variety of uses, such as when a programmer wants to pass a block of code to run in its own separate thread (employed in multi-thread environments), or when the programmer wants to re-define the abstract methods of widely-used functional interfaces such as Comparable of the Java Collections framework.
  • Final variables essentially have constant values that cannot be changed. Effectively final variables are essentially normal variables whose values do not change after being instantiated with initial values. Final and effectively final variables are allowed to be used in anonymous classes and lambda expressions. Lambda expressions are very similar to anonymous classes in terms of purpose, although they have their key differences. Lambda expressions are essentially objects/instances of functional interfaces, and have useful abilities that allow it to support functional programming, which is a programming style that mainly applies and inter-connects functions as its algorithmic-based programming model.

Examples:

// The Executable interface can be considered a functional interface, since it only contains one abstract method
interface Executable {
    // Abstract method (body is not defined yet, but will be defined by classes/lambda expressions that implement the Executable functional interface)
    void execute();
}

interface AnotherExecutable {
    // This abstract method needs to have a return value
    int anotherExecute();
}

interface ThirdExecutable {
    // Abstract method that takes parameters
    int thirdExecute(int a);
}

interface StringExecutable {
    int stringExecute(String a);
}

interface FourthExecutable {
    int fourthExecute(int a, int b);
}

class Runner {
    // The run() method takes in its parameter objects of classes that implement the Executable interface
    // Executable can be considered the parent variable type of all of the child classes that implement it, since those classes technically inherit its declared methods
    // The object/anonymous class/lambda expression passed here will have its own execute() abstract method of the Executable interface defined
    public void run(Executable e) {
        System.out.println("Executing code block...");
        e.execute();
    }

    public void anotherRun(AnotherExecutable e) {
        System.out.println("Executing code block...");
        int value = e.anotherExecute();
        System.out.println("Return value is: " + value);
    }

    // Method overloading with different kinds of parameters
    public void thirdRun(ThirdExecutable e) {
        System.out.println("Executing code block...");
        int value = e.thirdExecute(12);
        System.out.println("Return value is: " + value);
    }

    public void thirdRun(StringExecutable e) {
        System.out.println("Executing code block...");
        int value = e.stringExecute("Hello");
        System.out.println("Return value is: " + value);
    }

    public void fourthRun(FourthExecutable e) {
        System.out.println("Executing code block...");
        int value = e.fourthExecute(12, 13);
        System.out.println("Return value is: " + value);
    }
}

public class Application {
    public static void main(String[] args) {
        Runner runner = new Runner();
        // Before lambda expressions...
        // Pass into the run() method an anonymous class, which does not have a name. Although we cannot instantiate an object of the interface itself, the instantiated anonymous class here implements the Executable interface and subsequently implements its method(s), as shown by new Executable() {} notation
        runner.run(new Executable() {
            // Define execute() method here to be called in the run() method in the Runner class
            @Override
            public void execute() {
                System.out.println("Hello there");
            }
        });

        // After lambda expressions...
        // Lambda expression that only has one statement is passed to the run() method
        // (parameters) -> expression is the syntax of the lambda expression we passed into the run() method, where (parameters) indicates the parameters (can be none) of the abstract method of the functional interface (we can define operations on the parameters. Keep in mind that we are talking about the parameters themselves, not the arguments passed into the method), and expression indicates the code body of the lambda expression that defines the implementation of the abstract method
        // Since run() takes parameters of variable type Executable (objects of classes that implement the Executable functional interface), when the lambda expression is passed into run(), the program will know that it will define the abstract method of the functional interface Executable, and so the abstract execute() method will now have statements to actually execute when called upon within run()
        runner.run(() -> System.out.println("Hello there"));

        // Lambda expression that has a code block that contains multiple expressions is passed to the run() method
        // (parameters) -> {statements;} is the syntax of the lambda expression here, where {statements;} indicates the multiple statements, each separated by a ; and a new line, that are passed into the run() method to define the implementation of the abstract execute() method of the Executable functional interface
        // The lambda expression will take on a variable type Executable functional interface, which will determine the abstract method the lambda expression will ultimately implement, effectively allowing it represent a single-method interface with the utilization of a functional interface
        runner.run(() -> {
            System.out.println("This is code passed in a lambda expression");
            System.out.println("Hello there");
        });

        // Store a lambda expression into an object of variable type Executable interface
        // The lambda expression here sort of acts like an anonymous class that implements the Executable interface (satisfying the defined variable type), as it implements the code body of the abstract method provided by the functional interface
        // The lambda expression is considered like sort of an anonymous function, as it defines the code block of a method that has no name, but this method ultimately defines the implementation of the abstract method of the functional interface that this lambda expression is declared to implement
        Executable executableObject = () -> {
            System.out.println("Hello again");
        };

        // Alternate way, where you cast the lambda expression object to variable type Executable, and store it in an object variable of variable type Object, which encompasses all child classes and interfaces
        /*
         * Object executableObject = (Executable) () -> {
         *     System.out.println("Hello again");
         * };
         */

        runner.run(executableObject);

        System.out.println();

        // Pass into anotherRun() an anonymous class of variable type AnotherExecutable that will define the anotherExecute() abstract method
        runner.anotherRun(new AnotherExecutable() {
            @Override
            public int anotherExecute() {
                System.out.println("Anonymous class running");
                return 7;
            }
        });

        // Pass into anotherRun() a lambda expression with multiple statements, which after being passed into the method will take on variable type AnotherExecutable, and this variable type allows the program to know which method the lambda expression implements, as well as that method's return type
        runner.anotherRun(() -> {
            System.out.println("Lambda expression running");
            return 8;
        });

        // Pass into anotherRun() a lambda expression with one statement, and the program can automatically recognize the data type of that statement, and use that statement as the return value (thus removing the need for the return keyword here)
        runner.anotherRun(() -> 9);

        runner.thirdRun(new ThirdExecutable() {
            // Override abstract method while keeping the same parameters
            // Make sure to have appropriate return value
            @Override
            public int thirdExecute(int a) {
                return 7 + a;
            }
        });

        // Return the sum of 8 and a as the return value of the lambda expression
        // Declare the parameter(s) of the abstract method in the lambda expression (we don't usually need to define the data type of the parameter, but since thirdRun() has been method overloaded in such a way (same number of parameters but different types), we need to in order for the program to determine which version of thirdRun() is being run), as well as the define the code body of the abstract method
        runner.thirdRun((int a) -> 8 + a);

        // Call other version of thirdRun(), where the abstract method and lambda expression take a parameter of type String instead of int
        runner.thirdRun((String a) -> {
            System.out.println(a);
            return 7;
        });

        // Use effectively final variable defined in main() method in anonymous class and lambda expression
        int c = 100;

        int d = 77;

        runner.fourthRun(new FourthExecutable() {
            @Override
            public int fourthExecute(int a, int b) {
                // Can do this: int d = 88, since the anonymous class creates its own scope that allows us to redeclare variables just for within that scope
                // Reminder that re-declared variables within inner scope do not affect the previously declared variables in the outer scope
                return a + b + c;
            }
        });

        // No need to define data types of the parameters here since there is no method overloading. The program will figure out the data types itself
        runner.fourthRun((a, b) -> {
            // Can't do this: int d= 8, since the lambda expression technically does not create its own scope
            return a + b + c;
        });
    }
}

Application.main(null);
Executing code block...
Hello there
Executing code block...
Hello there
Executing code block...
This is code passed in a lambda expression
Hello there
Executing code block...
Hello again

Executing code block...
Anonymous class running
Return value is: 7
Executing code block...
Lambda expression running
Return value is: 8
Executing code block...
Return value is: 9
Executing code block...
Return value is: 19
Executing code block...
Return value is: 20
Executing code block...
Hello
Return value is: 7
Executing code block...
Return value is: 125
Executing code block...
Return value is: 125