diff --git a/content/adventures/ar.yaml b/content/adventures/ar.yaml index d06f3f8fa75..659bc682751 100644 --- a/content/adventures/ar.yaml +++ b/content/adventures/ar.yaml @@ -526,6 +526,14 @@ adventures: story_text_3: | يمكنك أيضاً ترك الكومبيوتر يختار لك أرقام عشوائياً بإستخدام الأمر بشكل عشوائي. يوضح هذا المثال كيفية إختيار رقم من الجداول للتدريب، و بذلك تحصل على أرقام مختلفة دائماً لتتمرن على ناتج الضرب: + example_code_3: | + numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 + number_1 = _ + number_2 = _ + correct_answer = number_1 * number_2 + given_answer = 'What is ' number_1 ' times ' number_2 '?' + {if} _ + {else} _ start_code: '{print} "أهلاً بكم في هذه الآلة الحاسبة!"' 9: story_text: | @@ -1376,33 +1384,33 @@ adventures: ``` start_code: |4 - define food_order - toppings = ask 'pepperoni, tuna, veggie or cheese?' - size = ask 'big, medium or small?' - number_of_pizza = ask 'How many these pizzas would you like?' + define food_order + toppings = ask 'pepperoni, tuna, veggie or cheese?' + size = ask 'big, medium or small?' + number_of_pizza = ask 'How many these pizzas would you like?' - print 'YOU ORDERED' - print number_of_pizzas ' size ' topping ' pizza' + print 'YOU ORDERED' + print number_of_pizzas ' size ' topping ' pizza' - define drinks_order - drink = ask 'water, coke, icetea, lemonade or coffee?' - number_of_drinks = ask 'How many of these drinks would you like?' + define drinks_order + drink = ask 'water, coke, icetea, lemonade or coffee?' + number_of_drinks = ask 'How many of these drinks would you like?' - print 'YOU ORDERED' - print number_of_drinks ' ' drink + print 'YOU ORDERED' + print number_of_drinks ' ' drink - 'Welcome to Hedy pizza' - more_food = ask 'Would you like to order a pizza?' - while more_food = 'yes' - return food_order - more_food = ask 'Would you like to order a pizza?' - more_drinks = ask 'Would you like to order some drinks?' - while more_drinks == 'yes' - call drink_order - more_drinks == ask 'Would you like to order more drinks?' + 'Welcome to Hedy pizza' + more_food = ask 'Would you like to order a pizza?' + while more_food = 'yes' + return food_order + more_food = ask 'Would you like to order a pizza?' + more_drinks = ask 'Would you like to order some drinks?' + while more_drinks == 'yes' + call drink_order + more_drinks == ask 'Would you like to order more drinks?' - print 'Thanks for ordering!' + print 'Thanks for ordering!' 18: story_text: |- ### Exercise @@ -1427,20 +1435,20 @@ adventures: ``` start_code: |4 - animals = ['pig', 'dog', 'cow'] - sounds = ['oink', 'woof', 'moo'] - for i in range 1 to 3 - animal = animals[i] - sound = sounds[i] - print 'Old McDonald had a farm' - print 'E I E I O!' - print 'and on that farm he had a ' animal - print 'E I E I O!' - print 'with a ' sound sound ' here' - print 'and a ' sound sound ' there' - print 'here a ' sound - print 'there a ' sound - print 'everywhere a ' sound sound + animals = ['pig', 'dog', 'cow'] + sounds = ['oink', 'woof', 'moo'] + for i in range 1 to 3 + animal = animals[i] + sound = sounds[i] + print 'Old McDonald had a farm' + print 'E I E I O!' + print 'and on that farm he had a ' animal + print 'E I E I O!' + print 'with a ' sound sound ' here' + print 'and a ' sound sound ' there' + print 'here a ' sound + print 'there a ' sound + print 'everywhere a ' sound sound default: name: المقدمة default_save_name: مقدمة diff --git a/content/adventures/fy.yaml b/content/adventures/fy.yaml index ac8f7eb0402..d5e71079310 100644 --- a/content/adventures/fy.yaml +++ b/content/adventures/fy.yaml @@ -541,6 +541,14 @@ adventures: ``` story_text_3: | You can also let the computer do random calculations on its own using {random}. + example_code_3: | + numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 + number_1 = _ + number_2 = _ + correct_answer = number_1 * number_2 + given_answer = 'What is ' number_1 ' times ' number_2 '?' + {if} _ + {else} _ start_code: '{print} ''Welcome to this calculator!''' 9: story_text: | @@ -1391,33 +1399,33 @@ adventures: ``` start_code: |4 - define food_order - toppings = ask 'pepperoni, tuna, veggie or cheese?' - size = ask 'big, medium or small?' - number_of_pizza = ask 'How many these pizzas would you like?' + define food_order + toppings = ask 'pepperoni, tuna, veggie or cheese?' + size = ask 'big, medium or small?' + number_of_pizza = ask 'How many these pizzas would you like?' - print 'YOU ORDERED' - print number_of_pizzas ' size ' topping ' pizza' + print 'YOU ORDERED' + print number_of_pizzas ' size ' topping ' pizza' - define drinks_order - drink = ask 'water, coke, icetea, lemonade or coffee?' - number_of_drinks = ask 'How many of these drinks would you like?' + define drinks_order + drink = ask 'water, coke, icetea, lemonade or coffee?' + number_of_drinks = ask 'How many of these drinks would you like?' - print 'YOU ORDERED' - print number_of_drinks ' ' drink + print 'YOU ORDERED' + print number_of_drinks ' ' drink - 'Welcome to Hedy pizza' - more_food = ask 'Would you like to order a pizza?' - while more_food = 'yes' - return food_order - more_food = ask 'Would you like to order a pizza?' - more_drinks = ask 'Would you like to order some drinks?' - while more_drinks == 'yes' - call drink_order - more_drinks == ask 'Would you like to order more drinks?' + 'Welcome to Hedy pizza' + more_food = ask 'Would you like to order a pizza?' + while more_food = 'yes' + return food_order + more_food = ask 'Would you like to order a pizza?' + more_drinks = ask 'Would you like to order some drinks?' + while more_drinks == 'yes' + call drink_order + more_drinks == ask 'Would you like to order more drinks?' - print 'Thanks for ordering!' + print 'Thanks for ordering!' 18: story_text: |- ### Exercise @@ -1442,20 +1450,20 @@ adventures: ``` start_code: |4 - animals = ['pig', 'dog', 'cow'] - sounds = ['oink', 'woof', 'moo'] - for i in range 1 to 3 - animal = animals[i] - sound = sounds[i] - print 'Old McDonald had a farm' - print 'E I E I O!' - print 'and on that farm he had a ' animal - print 'E I E I O!' - print 'with a ' sound sound ' here' - print 'and a ' sound sound ' there' - print 'here a ' sound - print 'there a ' sound - print 'everywhere a ' sound sound + animals = ['pig', 'dog', 'cow'] + sounds = ['oink', 'woof', 'moo'] + for i in range 1 to 3 + animal = animals[i] + sound = sounds[i] + print 'Old McDonald had a farm' + print 'E I E I O!' + print 'and on that farm he had a ' animal + print 'E I E I O!' + print 'with a ' sound sound ' here' + print 'and a ' sound sound ' there' + print 'here a ' sound + print 'there a ' sound + print 'everywhere a ' sound sound default: name: Introduction default_save_name: intro diff --git a/content/adventures/he.yaml b/content/adventures/he.yaml index 0e976825091..695b7d5aefa 100644 --- a/content/adventures/he.yaml +++ b/content/adventures/he.yaml @@ -542,6 +542,14 @@ adventures: ``` story_text_3: | You can also let the computer do random calculations on its own using {random}. + example_code_3: | + numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 + number_1 = _ + number_2 = _ + correct_answer = number_1 * number_2 + given_answer = 'What is ' number_1 ' times ' number_2 '?' + {if} _ + {else} _ start_code: '{print} ''Welcome to this calculator!''' 9: story_text: | @@ -1393,33 +1401,33 @@ adventures: ``` start_code: |4 - define food_order - toppings = ask 'pepperoni, tuna, veggie or cheese?' - size = ask 'big, medium or small?' - number_of_pizza = ask 'How many these pizzas would you like?' + define food_order + toppings = ask 'pepperoni, tuna, veggie or cheese?' + size = ask 'big, medium or small?' + number_of_pizza = ask 'How many these pizzas would you like?' - print 'YOU ORDERED' - print number_of_pizzas ' size ' topping ' pizza' + print 'YOU ORDERED' + print number_of_pizzas ' size ' topping ' pizza' - define drinks_order - drink = ask 'water, coke, icetea, lemonade or coffee?' - number_of_drinks = ask 'How many of these drinks would you like?' + define drinks_order + drink = ask 'water, coke, icetea, lemonade or coffee?' + number_of_drinks = ask 'How many of these drinks would you like?' - print 'YOU ORDERED' - print number_of_drinks ' ' drink + print 'YOU ORDERED' + print number_of_drinks ' ' drink - 'Welcome to Hedy pizza' - more_food = ask 'Would you like to order a pizza?' - while more_food = 'yes' - return food_order - more_food = ask 'Would you like to order a pizza?' - more_drinks = ask 'Would you like to order some drinks?' - while more_drinks == 'yes' - call drink_order - more_drinks == ask 'Would you like to order more drinks?' + 'Welcome to Hedy pizza' + more_food = ask 'Would you like to order a pizza?' + while more_food = 'yes' + return food_order + more_food = ask 'Would you like to order a pizza?' + more_drinks = ask 'Would you like to order some drinks?' + while more_drinks == 'yes' + call drink_order + more_drinks == ask 'Would you like to order more drinks?' - print 'Thanks for ordering!' + print 'Thanks for ordering!' 18: story_text: |- ### Exercise @@ -1444,20 +1452,20 @@ adventures: ``` start_code: |4 - animals = ['pig', 'dog', 'cow'] - sounds = ['oink', 'woof', 'moo'] - for i in range 1 to 3 - animal = animals[i] - sound = sounds[i] - print 'Old McDonald had a farm' - print 'E I E I O!' - print 'and on that farm he had a ' animal - print 'E I E I O!' - print 'with a ' sound sound ' here' - print 'and a ' sound sound ' there' - print 'here a ' sound - print 'there a ' sound - print 'everywhere a ' sound sound + animals = ['pig', 'dog', 'cow'] + sounds = ['oink', 'woof', 'moo'] + for i in range 1 to 3 + animal = animals[i] + sound = sounds[i] + print 'Old McDonald had a farm' + print 'E I E I O!' + print 'and on that farm he had a ' animal + print 'E I E I O!' + print 'with a ' sound sound ' here' + print 'and a ' sound sound ' there' + print 'here a ' sound + print 'there a ' sound + print 'everywhere a ' sound sound default: name: הקדמה default_save_name: הקדמה diff --git a/content/adventures/hi.yaml b/content/adventures/hi.yaml index 9f1be5ada88..a0e44029579 100644 --- a/content/adventures/hi.yaml +++ b/content/adventures/hi.yaml @@ -541,6 +541,14 @@ adventures: ``` story_text_3: | You can also let the computer do random calculations on its own using {random}. + example_code_3: | + numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 + number_1 = _ + number_2 = _ + correct_answer = number_1 * number_2 + given_answer = 'What is ' number_1 ' times ' number_2 '?' + {if} _ + {else} _ start_code: '{print} ''Welcome to this calculator!''' 9: story_text: | @@ -1391,33 +1399,33 @@ adventures: ``` start_code: |4 - define food_order - toppings = ask 'pepperoni, tuna, veggie or cheese?' - size = ask 'big, medium or small?' - number_of_pizza = ask 'How many these pizzas would you like?' + define food_order + toppings = ask 'pepperoni, tuna, veggie or cheese?' + size = ask 'big, medium or small?' + number_of_pizza = ask 'How many these pizzas would you like?' - print 'YOU ORDERED' - print number_of_pizzas ' size ' topping ' pizza' + print 'YOU ORDERED' + print number_of_pizzas ' size ' topping ' pizza' - define drinks_order - drink = ask 'water, coke, icetea, lemonade or coffee?' - number_of_drinks = ask 'How many of these drinks would you like?' + define drinks_order + drink = ask 'water, coke, icetea, lemonade or coffee?' + number_of_drinks = ask 'How many of these drinks would you like?' - print 'YOU ORDERED' - print number_of_drinks ' ' drink + print 'YOU ORDERED' + print number_of_drinks ' ' drink - 'Welcome to Hedy pizza' - more_food = ask 'Would you like to order a pizza?' - while more_food = 'yes' - return food_order - more_food = ask 'Would you like to order a pizza?' - more_drinks = ask 'Would you like to order some drinks?' - while more_drinks == 'yes' - call drink_order - more_drinks == ask 'Would you like to order more drinks?' + 'Welcome to Hedy pizza' + more_food = ask 'Would you like to order a pizza?' + while more_food = 'yes' + return food_order + more_food = ask 'Would you like to order a pizza?' + more_drinks = ask 'Would you like to order some drinks?' + while more_drinks == 'yes' + call drink_order + more_drinks == ask 'Would you like to order more drinks?' - print 'Thanks for ordering!' + print 'Thanks for ordering!' 18: story_text: |- ### Exercise @@ -1442,20 +1450,20 @@ adventures: ``` start_code: |4 - animals = ['pig', 'dog', 'cow'] - sounds = ['oink', 'woof', 'moo'] - for i in range 1 to 3 - animal = animals[i] - sound = sounds[i] - print 'Old McDonald had a farm' - print 'E I E I O!' - print 'and on that farm he had a ' animal - print 'E I E I O!' - print 'with a ' sound sound ' here' - print 'and a ' sound sound ' there' - print 'here a ' sound - print 'there a ' sound - print 'everywhere a ' sound sound + animals = ['pig', 'dog', 'cow'] + sounds = ['oink', 'woof', 'moo'] + for i in range 1 to 3 + animal = animals[i] + sound = sounds[i] + print 'Old McDonald had a farm' + print 'E I E I O!' + print 'and on that farm he had a ' animal + print 'E I E I O!' + print 'with a ' sound sound ' here' + print 'and a ' sound sound ' there' + print 'here a ' sound + print 'there a ' sound + print 'everywhere a ' sound sound default: name: Introduction default_save_name: intro diff --git a/content/adventures/hu.yaml b/content/adventures/hu.yaml index 6199041d9ac..59acb503fe1 100644 --- a/content/adventures/hu.yaml +++ b/content/adventures/hu.yaml @@ -545,6 +545,14 @@ adventures: ``` story_text_3: | You can also let the computer do random calculations on its own using {random}. + example_code_3: | + numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 + number_1 = _ + number_2 = _ + correct_answer = number_1 * number_2 + given_answer = 'What is ' number_1 ' times ' number_2 '?' + {if} _ + {else} _ start_code: print 'Üdvözlünk a számológépnél!' 9: story_text: A 6. szinten megtanultad a számológép készítését, a 7. szinten kibővítheted ezt a kódot, és egy kis matematikai játékot készíthetsz belőle. Mint ez... @@ -1394,33 +1402,33 @@ adventures: ``` start_code: |4 - define food_order - toppings = ask 'pepperoni, tuna, veggie or cheese?' - size = ask 'big, medium or small?' - number_of_pizza = ask 'How many these pizzas would you like?' + define food_order + toppings = ask 'pepperoni, tuna, veggie or cheese?' + size = ask 'big, medium or small?' + number_of_pizza = ask 'How many these pizzas would you like?' - print 'YOU ORDERED' - print number_of_pizzas ' size ' topping ' pizza' + print 'YOU ORDERED' + print number_of_pizzas ' size ' topping ' pizza' - define drinks_order - drink = ask 'water, coke, icetea, lemonade or coffee?' - number_of_drinks = ask 'How many of these drinks would you like?' + define drinks_order + drink = ask 'water, coke, icetea, lemonade or coffee?' + number_of_drinks = ask 'How many of these drinks would you like?' - print 'YOU ORDERED' - print number_of_drinks ' ' drink + print 'YOU ORDERED' + print number_of_drinks ' ' drink - 'Welcome to Hedy pizza' - more_food = ask 'Would you like to order a pizza?' - while more_food = 'yes' - return food_order - more_food = ask 'Would you like to order a pizza?' - more_drinks = ask 'Would you like to order some drinks?' - while more_drinks == 'yes' - call drink_order - more_drinks == ask 'Would you like to order more drinks?' + 'Welcome to Hedy pizza' + more_food = ask 'Would you like to order a pizza?' + while more_food = 'yes' + return food_order + more_food = ask 'Would you like to order a pizza?' + more_drinks = ask 'Would you like to order some drinks?' + while more_drinks == 'yes' + call drink_order + more_drinks == ask 'Would you like to order more drinks?' - print 'Thanks for ordering!' + print 'Thanks for ordering!' 18: story_text: |- ### Exercise @@ -1445,20 +1453,20 @@ adventures: ``` start_code: |4 - animals = ['pig', 'dog', 'cow'] - sounds = ['oink', 'woof', 'moo'] - for i in range 1 to 3 - animal = animals[i] - sound = sounds[i] - print 'Old McDonald had a farm' - print 'E I E I O!' - print 'and on that farm he had a ' animal - print 'E I E I O!' - print 'with a ' sound sound ' here' - print 'and a ' sound sound ' there' - print 'here a ' sound - print 'there a ' sound - print 'everywhere a ' sound sound + animals = ['pig', 'dog', 'cow'] + sounds = ['oink', 'woof', 'moo'] + for i in range 1 to 3 + animal = animals[i] + sound = sounds[i] + print 'Old McDonald had a farm' + print 'E I E I O!' + print 'and on that farm he had a ' animal + print 'E I E I O!' + print 'with a ' sound sound ' here' + print 'and a ' sound sound ' there' + print 'here a ' sound + print 'there a ' sound + print 'everywhere a ' sound sound default: name: Bevezető default_save_name: intro diff --git a/content/adventures/id.yaml b/content/adventures/id.yaml index 03785775a6c..30631304f26 100644 --- a/content/adventures/id.yaml +++ b/content/adventures/id.yaml @@ -543,8 +543,15 @@ adventures: {else} {print} 'Salah! Dulu ' _ ``` story_text_3: | - You can also let the computer do random calculations on its own using {random}. - This is how you choose a number of tables to practice, and from that you always get a different sum: + **Tambahan** Anda juga dapat membiarkan komputer melakukan penjumlahan acak sendiri menggunakan `{random}`. + example_code_3: | + angka = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 + angka_1 = _ + angka_2 = _ + jawaban_benar = angka_1 * angka_2 + diberikan_jawaban = 'Berapakah 'angka_1' dikalikan 'angka_2'?' + {if} _ + {else} _ start_code: | nomor_1 = {ask} 'Isi angka pertama:' nomor_2 = {ask} 'Isi angka kedua:' @@ -1030,123 +1037,123 @@ adventures: {print} 'Tolong, itu 'harga dolar'' ``` start_code: | - {print} 'Welcome to our sandwich shop' - amount 'How many sandwiches would you like to buy?' - {repeat} amount {times} - {ask} {is} {ask} 'What kind or bread would you like your sandwich to be?' - types_of_bread {is} white, wheat, rye, garlic, gluten free - {if} chosen_bread in types_of_bread - {print} 'Lovely!' + {print} 'Selamat datang di toko sandwich kami' + jumlah 'Berapa banyak sandwich yang ingin Anda beli?' + {repeat} jumlah {times} + {ask} {is} {ask} 'Anda ingin sandwich jenis apa atau roti apa?' + jenis_roti {is} putih, gandum, gandum hitam, bawang putih, bebas gluten + {if} roti_dipilih dalam jenis_roti_roti + {print} 'Indah sekali!' {else} - 'I'm sorry we don't sell that' - topping {is} {ask} 'What kind of topping would you like?' - sauce {is} {ask} 'What kind of sauce would you like?' - {print} One chosen_bread with topping and sauce. - price = amount * 6 - {print} 'That will be 'price dollar' please' + 'Maaf kami tidak menjualnya' + topping {is} {ask} 'Topping apa yang kamu mau?' + saus {is} {ask} 'Saus apa yang kamu mau?' + {print} Satu roti_pilihan dengan topping dan saus. + harga = jumlah * 6 + {print} 'Tolong, itu 'harga dolar'' 10: story_text: |- - ### Exercise - Debug this code. Good luck! + ### Latihan + Perbaiki kode ini. Semoga beruntung! example_code: | - **Warning! This code needs to be debugged!** + **Peringatan! Kode ini perlu diperbaiki!** ``` - names = Muad Hasan Samira Noura - activities = fly a kite, go swimming, go hiking, catch tan in the sun - {for} name {is} names - {print} At the beach name loves to activity at random + nama = Muad Hasan Samira Noura + kegiatan = menerbangkan layang-layang, berenang, mendaki gunung, berjemur di bawah sinar matahari + {for} nama {is} nama + {print} Di pantai namanya suka beraktivitas {at} {random} ``` start_code: | - names = Muad Hasan Samira Noura - activities = fly a kite, go swimming, go hiking, catch tan in the sun - {for} name {is} names - {print} At the beach name loves to activity at random + nama-nama = Muad Hasan Samira Noura + kegiatan = menerbangkan layang-layang, berenang, mendaki gunung, berjemur di bawah sinar matahari + {for} nama {is} nama-nama + {print} Di pantai namanya suka beraktivitas sembarangan 11: story_text: |- - ### Exercise - Debug this calender program. The output of this program is supposed to look like a list of dates. - For example: + ### Latihan + Perbaiki program kalender ini. Output dari program ini seharusnya terlihat seperti daftar tanggal. + Misalnya: ``` - Hedy calender - Here are all the days of November - November 1 - November 2 - November 3 + Kalender Hedy + Ini semua hari-hari di bulan November + 1 November + 2 November + 3 November ``` - And so on. + Dan seterusnya. - Mind that you have to test your code extra carefully for the month February, because the amount of days in this month changes in leap years. + Ingatlah bahwa Anda harus menguji kode Anda dengan ekstra hati-hati untuk bulan Februari, karena jumlah hari di bulan ini berubah berdasarkan tahun kabisat. example_code: | - **Warning! This code needs to be debugged!** + **Peringatan! Kode ini perlu diperbaiki!** ``` - print 'Hedy calender' - months_with_31 days = January, March, May, July, September, October, December - months_with_30_days = April, June, August, November - month = ask 'Which month would you like to see?' - if month in months_with_31_days - days = 31 - if month in months_with30_days - days = 30 - if month = February - leap_years = 2020, 2024, 2028, 2036, 2040, 2044, 2028 - year = ask 'What year is it?' - if year in leap_years - days = 29 - else - days = 28 - - print 'Here are all the days of ' moth - for i in range 1 to days - print month i + print 'Kalender Hedy' + bulan_dengan_31 hari = Januari, Maret, Mei, Juli, September, Oktober, Desember + bulan_dengan_30_hari = April, Juni, Agustus, November + bulan = tanya 'Bulan apa yang ingin Anda lihat?' + jika bulan dalam bulan_dengan_31_hari + hari = 31 + jika bulan dalam bulan_dengan30_hari + hari = 30 + jika bulan = Februari + tahun_kabisat = 2020, 2024, 2028, 2036, 2040, 2044, 2028 + tahun = tanya 'Tahun berapa sekarang?' + jika tahun dalam tahun_kabisat + hari = 29 + kalau tidak + hari = 28 + + print 'Inilah hari-hari' ngengat + untuk i dalam rentang 1 hingga hari + cetak bulan i ``` start_code: | - print 'Hedy calender' - months_with_31 days = January, March, May, July, September, October, December - months_with_30_days = April, June, August, November - month = ask 'Which month would you like to see?' - if month in months_with_31_days - days = 31 - if month in months_with30_days - days = 30 - if month = February - leap_years = 2020, 2024, 2028, 2036, 2040, 2044, 2028 - year = ask 'What year is it?' - if year in leap_years - days = 29 - else - days = 28 - - print 'Here are all the days of ' moth - for i in range 1 to days - print month i + print 'Kalender Hedy' + bulan_dengan_31 hari = Januari, Maret, Mei, Juli, September, Oktober, Desember + bulan_dengan_30_hari = April, Juni, Agustus, November + bulan = tanya 'Bulan apa yang ingin Anda lihat?' + jika bulan dalam bulan_dengan_31_hari + hari = 31 + jika bulan dalam bulan_dengan30_hari + hari = 30 + jika bulan = Februari + tahun_kabisat = 2020, 2024, 2028, 2036, 2040, 2044, 2028 + tahun = tanya 'Tahun berapa sekarang?' + jika tahun dalam tahun_kabisat + hari = 29 + kalau tidak + hari = 28 + + print 'Inilah hari-hari' ngengat + untuk i dalam rentang 1 hingga hari + cetak bulan i 12: story_text: |- - ### Exercise - Debug this code. Good luck! + ### Latihan + Perbaiki kode ini. Semoga beruntung! example_code: | - **Warning! This code needs to be debugged!** + **Peringatan! Kode ini perlu diperbaiki!** ``` - define greet - greetings = 'Hello', 'Hi there', 'Goodevening' - print greetings at random - - define take_order - food = ask 'What would you like to eat?' - print 'One food' - drink = 'What would you like to drink?' - print 'One ' drink - more = ask 'Would you like anything else?' - if more is 'no' - print 'Alright' - else - print 'And ' more - print 'Thank you' - - print 'Welcome to our restaurant' - people = ask 'How many people are in your party tonight?' - for i in range 0 to people - call greet_costumer + mendefinisikan salam + salam = 'Halo', 'Halo', 'Selamat malam' + cetak salam secara acak + + tentukan mengambil_pesanan + makanan = tanya 'Kamu mau makan apa?' + print 'Satu makanan' + minum = 'Kamu ingin minum apa?' + print minuman 'Satu' + more = tanya 'Apakah Anda ingin yang lain?' + jika lebih berarti 'tidak' + cetak 'Baiklah' + kalau tidak + print 'Dan' lagi + print 'Terima kasih' + + ptint 'Selamat datang di restoran kami' + people = tanya 'Berapa orang yang ada di pestamu malam ini?' + untuk saya dalam rentang 0 hingga orang + hubungi salam_pelanggan ``` start_code: | define greet @@ -1416,33 +1423,33 @@ adventures: ``` start_code: |4 - define food_order - toppings = ask 'pepperoni, tuna, veggie or cheese?' - size = ask 'big, medium or small?' - number_of_pizza = ask 'How many these pizzas would you like?' + define food_order + toppings = ask 'pepperoni, tuna, veggie or cheese?' + size = ask 'big, medium or small?' + number_of_pizza = ask 'How many these pizzas would you like?' - print 'YOU ORDERED' - print number_of_pizzas ' size ' topping ' pizza' + print 'YOU ORDERED' + print number_of_pizzas ' size ' topping ' pizza' - define drinks_order - drink = ask 'water, coke, icetea, lemonade or coffee?' - number_of_drinks = ask 'How many of these drinks would you like?' + define drinks_order + drink = ask 'water, coke, icetea, lemonade or coffee?' + number_of_drinks = ask 'How many of these drinks would you like?' - print 'YOU ORDERED' - print number_of_drinks ' ' drink + print 'YOU ORDERED' + print number_of_drinks ' ' drink - 'Welcome to Hedy pizza' - more_food = ask 'Would you like to order a pizza?' - while more_food = 'yes' - return food_order + 'Welcome to Hedy pizza' more_food = ask 'Would you like to order a pizza?' - more_drinks = ask 'Would you like to order some drinks?' - while more_drinks == 'yes' - call drink_order - more_drinks == ask 'Would you like to order more drinks?' + while more_food = 'yes' + return food_order + more_food = ask 'Would you like to order a pizza?' + more_drinks = ask 'Would you like to order some drinks?' + while more_drinks == 'yes' + call drink_order + more_drinks == ask 'Would you like to order more drinks?' - print 'Thanks for ordering!' + print 'Thanks for ordering!' 18: story_text: |- ### Exercise @@ -1467,20 +1474,20 @@ adventures: ``` start_code: |4 - animals = ['pig', 'dog', 'cow'] - sounds = ['oink', 'woof', 'moo'] - for i in range 1 to 3 - animal = animals[i] - sound = sounds[i] - print 'Old McDonald had a farm' - print 'E I E I O!' - print 'and on that farm he had a ' animal - print 'E I E I O!' - print 'with a ' sound sound ' here' - print 'and a ' sound sound ' there' - print 'here a ' sound - print 'there a ' sound - print 'everywhere a ' sound sound + animals = ['pig', 'dog', 'cow'] + sounds = ['oink', 'woof', 'moo'] + for i in range 1 to 3 + animal = animals[i] + sound = sounds[i] + print 'Old McDonald had a farm' + print 'E I E I O!' + print 'and on that farm he had a ' animal + print 'E I E I O!' + print 'with a ' sound sound ' here' + print 'and a ' sound sound ' there' + print 'here a ' sound + print 'there a ' sound + print 'everywhere a ' sound sound default: name: Pengantar default_save_name: intro diff --git a/content/adventures/nl.yaml b/content/adventures/nl.yaml index 87e7f27148f..8e6bd0bbff0 100644 --- a/content/adventures/nl.yaml +++ b/content/adventures/nl.yaml @@ -1060,64 +1060,51 @@ adventures: {for} naam {is} namen {print} Op het strand vindt naam het leuk om to activiteit at random 11: - story_text: |- - ### Exercise - Debug this calender program. The output of this program is supposed to look like a list of dates. - For example: - - ``` - Hedy calender - Here are all the days of November - November 1 - November 2 - November 3 - ``` - And so on. - - Mind that you have to test your code extra carefully for the month February, because the amount of days in this month changes in leap years. + story_text: "### Opdracht\nDebug dit kalender-programma. De uitvoer van het programma moet eruitzien als een lijst van datums.\nBijvoorbeeld:\n\n```\nHedy kalender\nHier zijn alle dagen van november\n1 november \n2 november \n3 november \n```\nEnzovoort.\n\nLet op! Test je code voor de\ + \ maand februari extra goed, want het aantal dagen in deze maand verandert in schrikkeljaren." example_code: | - **Warning! This code needs to be debugged!** + **Pas op! Deze code bevat fouten!** ``` - print 'Hedy calender' - months_with_31 days = January, March, May, July, September, October, December - months_with_30_days = April, June, August, November - month = ask 'Which month would you like to see?' - if month in months_with_31_days - days = 31 - if month in months_with30_days - days = 30 - if month = February - leap_years = 2020, 2024, 2028, 2036, 2040, 2044, 2028 - year = ask 'What year is it?' - if year in leap_years - days = 29 + print 'Hedy kalender' + maanden_met_31 dagen = januari, maart, mei, juli, september, october, december + maanden_met_30_dagen = april, juni, augustus, november + maand = ask 'Welke maand wil je zien?' + if maand in maanden_met_31_dagen + dagen = 31 + if maand in maanden_met30_dagen + dagen = 30 + if maand = februari + schrikkeljaren = 2020, 2024, 2028, 2036, 2040, 2044, 2028 + jaar = ask 'Welk jaar is het?' + if jaar in schrikkeljaren + dagen = 29 else - days = 28 + dagen = 28 - print 'Here are all the days of ' moth - for i in range 1 to days - print month i + print 'Hier zijn alle dagen van ' maand + for i in range 1 to dagen + print i maand ``` start_code: | - print 'Hedy calender' - months_with_31 days = January, March, May, July, September, October, December - months_with_30_days = April, June, August, November - month = ask 'Which month would you like to see?' - if month in months_with_31_days - days = 31 - if month in months_with30_days - days = 30 - if month = February - leap_years = 2020, 2024, 2028, 2036, 2040, 2044, 2028 - year = ask 'What year is it?' - if year in leap_years - days = 29 + print 'Hedy kalender' + maanden_met_31 dagen = januari, maart, mei, juli, september, october, december + maanden_met_30_dagen = april, juni, augustus, november + maand = ask 'Welke maand wil je zien?' + if maand in maanden_met_31_dagen + dagen = 31 + if maand in maanden_met30_dagen + dagen = 30 + if maand = februari + schrikkeljaren = 2020, 2024, 2028, 2036, 2040, 2044, 2028 + jaar = ask 'Welk jaar is het?' + if jaar in schrikkeljaren + dagen = 29 else - days = 28 + dagen = 28 - print 'Here are all the days of ' moth - for i in range 1 to days - print month i + print 'Hier zijn alle dagen van ' maand + for i in range 1 to dagen + print i maand 12: story_text: |- ### Exercise @@ -1414,33 +1401,33 @@ adventures: ``` start_code: |4 - define food_order - toppings = ask 'pepperoni, tuna, veggie or cheese?' - size = ask 'big, medium or small?' - number_of_pizza = ask 'How many these pizzas would you like?' + define food_order + toppings = ask 'pepperoni, tuna, veggie or cheese?' + size = ask 'big, medium or small?' + number_of_pizza = ask 'How many these pizzas would you like?' - print 'YOU ORDERED' - print number_of_pizzas ' size ' topping ' pizza' + print 'YOU ORDERED' + print number_of_pizzas ' size ' topping ' pizza' - define drinks_order - drink = ask 'water, coke, icetea, lemonade or coffee?' - number_of_drinks = ask 'How many of these drinks would you like?' + define drinks_order + drink = ask 'water, coke, icetea, lemonade or coffee?' + number_of_drinks = ask 'How many of these drinks would you like?' - print 'YOU ORDERED' - print number_of_drinks ' ' drink + print 'YOU ORDERED' + print number_of_drinks ' ' drink - 'Welcome to Hedy pizza' - more_food = ask 'Would you like to order a pizza?' - while more_food = 'yes' - return food_order - more_food = ask 'Would you like to order a pizza?' - more_drinks = ask 'Would you like to order some drinks?' - while more_drinks == 'yes' - call drink_order - more_drinks == ask 'Would you like to order more drinks?' + 'Welcome to Hedy pizza' + more_food = ask 'Would you like to order a pizza?' + while more_food = 'yes' + return food_order + more_food = ask 'Would you like to order a pizza?' + more_drinks = ask 'Would you like to order some drinks?' + while more_drinks == 'yes' + call drink_order + more_drinks == ask 'Would you like to order more drinks?' - print 'Thanks for ordering!' + print 'Thanks for ordering!' 18: story_text: |- ### Exercise @@ -1465,20 +1452,20 @@ adventures: ``` start_code: |4 - animals = ['pig', 'dog', 'cow'] - sounds = ['oink', 'woof', 'moo'] - for i in range 1 to 3 - animal = animals[i] - sound = sounds[i] - print 'Old McDonald had a farm' - print 'E I E I O!' - print 'and on that farm he had a ' animal - print 'E I E I O!' - print 'with a ' sound sound ' here' - print 'and a ' sound sound ' there' - print 'here a ' sound - print 'there a ' sound - print 'everywhere a ' sound sound + animals = ['pig', 'dog', 'cow'] + sounds = ['oink', 'woof', 'moo'] + for i in range 1 to 3 + animal = animals[i] + sound = sounds[i] + print 'Old McDonald had a farm' + print 'E I E I O!' + print 'and on that farm he had a ' animal + print 'E I E I O!' + print 'with a ' sound sound ' here' + print 'and a ' sound sound ' there' + print 'here a ' sound + print 'there a ' sound + print 'everywhere a ' sound sound default: name: Introductie default_save_name: intro @@ -4181,7 +4168,7 @@ adventures: Maak het liedje af. Zoek de tekst op als je die niet meer weet. ### Opdracht 2 - De laatste regel van het liedje is anders. Zorg dta je die regel ook print iin de `{for}`. Darr heb je een `{if}` voor nodig. + De laatste regel van het liedje is anders. Zorg dat je die regel ook print in de `{for}`. Daar heb je een `{if}` voor nodig. example_code: | ``` _ _ _ _ 10 _ 1 diff --git a/content/adventures/uk.yaml b/content/adventures/uk.yaml index ee47b978629..71611c1961a 100644 --- a/content/adventures/uk.yaml +++ b/content/adventures/uk.yaml @@ -52,7 +52,7 @@ adventures: Цей код не працюватиме у цьому рівні, оскільки ви ще не використовували змінні. Змініть команди `{ask}` та `{echo}` у вашому коді на правильну форму, яку ви вивчили у цьому рівні. - **Додатково** Додайте до коду команду sleep, щоб створити напругу у вашій історії. + **Додатково** Додайте до коду команду `{sleep}`, щоб створити напругу у вашій історії. start_code: '{print} Твоя історія' 3: story_text: | @@ -1419,33 +1419,33 @@ adventures: ``` start_code: |4 - define food_order - toppings = ask 'pepperoni, tuna, veggie or cheese?' - size = ask 'big, medium or small?' - number_of_pizza = ask 'How many these pizzas would you like?' + define food_order + toppings = ask 'pepperoni, tuna, veggie or cheese?' + size = ask 'big, medium or small?' + number_of_pizza = ask 'How many these pizzas would you like?' - print 'YOU ORDERED' - print number_of_pizzas ' size ' topping ' pizza' + print 'YOU ORDERED' + print number_of_pizzas ' size ' topping ' pizza' - define drinks_order - drink = ask 'water, coke, icetea, lemonade or coffee?' - number_of_drinks = ask 'How many of these drinks would you like?' + define drinks_order + drink = ask 'water, coke, icetea, lemonade or coffee?' + number_of_drinks = ask 'How many of these drinks would you like?' - print 'YOU ORDERED' - print number_of_drinks ' ' drink + print 'YOU ORDERED' + print number_of_drinks ' ' drink - 'Welcome to Hedy pizza' - more_food = ask 'Would you like to order a pizza?' - while more_food = 'yes' - return food_order - more_food = ask 'Would you like to order a pizza?' - more_drinks = ask 'Would you like to order some drinks?' - while more_drinks == 'yes' - call drink_order - more_drinks == ask 'Would you like to order more drinks?' + 'Welcome to Hedy pizza' + more_food = ask 'Would you like to order a pizza?' + while more_food = 'yes' + return food_order + more_food = ask 'Would you like to order a pizza?' + more_drinks = ask 'Would you like to order some drinks?' + while more_drinks == 'yes' + call drink_order + more_drinks == ask 'Would you like to order more drinks?' - print 'Thanks for ordering!' + print 'Thanks for ordering!' 18: story_text: |- ### Exercise @@ -1470,20 +1470,20 @@ adventures: ``` start_code: |4 - animals = ['pig', 'dog', 'cow'] - sounds = ['oink', 'woof', 'moo'] - for i in range 1 to 3 - animal = animals[i] - sound = sounds[i] - print 'Old McDonald had a farm' - print 'E I E I O!' - print 'and on that farm he had a ' animal - print 'E I E I O!' - print 'with a ' sound sound ' here' - print 'and a ' sound sound ' there' - print 'here a ' sound - print 'there a ' sound - print 'everywhere a ' sound sound + animals = ['pig', 'dog', 'cow'] + sounds = ['oink', 'woof', 'moo'] + for i in range 1 to 3 + animal = animals[i] + sound = sounds[i] + print 'Old McDonald had a farm' + print 'E I E I O!' + print 'and on that farm he had a ' animal + print 'E I E I O!' + print 'with a ' sound sound ' here' + print 'and a ' sound sound ' there' + print 'here a ' sound + print 'there a ' sound + print 'everywhere a ' sound sound default: name: Вступ default_save_name: Вступ diff --git a/content/cheatsheets/uk.yaml b/content/cheatsheets/uk.yaml index 8c9be8b60f7..6d4143b4904 100644 --- a/content/cheatsheets/uk.yaml +++ b/content/cheatsheets/uk.yaml @@ -35,7 +35,7 @@ колір {is} {ask} Який твій улюблений колір? {print} колір твій улюблений! - name: '{sleep}' - explanation: '`{sleep}` робить так, що Hedy затримується на секунду, або на кілька секунд.' + explanation: Із `{sleep}` , ви можете змусити Hedy затримуватися на секунду, або на кілька секунд. demo_code: |- {print} Одну секунду, дайте подумати... {sleep} @@ -101,7 +101,7 @@ explanation: Перевір елементи командою `{in}`. demo_code: |- красиві_кольори {is} зелений, жовтий - колір {is} {ask} 'Який {is} твій улюблений колір?' + колір {is} {ask} 'Який твій улюблений колір?' {if} колір {in} красиві_кольори {print} 'красивий!' {else} {print} 'пф' - name: '{pressed}' explanation: Перевірте, чи дана клавіша на клавіатурі `{pressed}`. @@ -309,7 +309,7 @@ першийфрукт = фрукти[1] {print} першийфрукт - name: Отримати випадковий елемент зі списку - explanation: Для отримання випадкового елемента зі списку ми використовуємо [випадковий], тому фрукти[випадковий] означає, отримати випадковий фрукт зі списку! + explanation: Для отримання випадкового елемента зі списку ми використовуємо [{випадковий}], тому фрукти[{випадковий}] означає, отримати довільний фрукт зі списку! demo_code: |- фрукти = ['банан', 'яблуко', 'вишня'] випадковий_фрукт = фрукти[{random}] diff --git a/content/client-messages/uk.yaml b/content/client-messages/uk.yaml index 9759165b917..74c7b7abe2d 100644 --- a/content/client-messages/uk.yaml +++ b/content/client-messages/uk.yaml @@ -1,7 +1,7 @@ CheckInternet: Перевірте, чи ваше підключення до Інтернету працює належним чином. Connection_error: Не вдалося підключитися до сервера. Empty_output: Цей код працює, але нічого не друкує. Додайте команду друку до свого коду або використовуйте черепаху, щоб отримати вивід. -Errors_found: You made a mistake! Don't worry, Hedy is trying to find the mistakes +Errors_found: Ви зробили помилку! Не турбуйтеся, ми продовимо виконувати програму Execute_error: Щось пішло не так під час запуску програми. Other_error: Ой! Можливо, ми трохи помилилися. Program_repair: Це може бути правильний код, ви можете його виправити? diff --git a/content/parsons/nl.yaml b/content/parsons/nl.yaml index f0854f85886..cf0177570d8 100644 --- a/content/parsons/nl.yaml +++ b/content/parsons/nl.yaml @@ -68,7 +68,7 @@ levels: story: |- Jij bent de nieuwste Pokémon trainer Pallet Town! Maak een programma dat jouw eerste Pokémon uitkiest. - Laat het programma weer even wachten voordat hij jouw eerste pokémon onthult. + Laat het programma weer even wachten voordat hij jouw eerste Pokémon onthult. code: |- pokemons {is} Pikachu, Charmander, Bulbasaur, Squirtle {print} 'Dit wordt jouw eerste Pokémon!' diff --git a/content/tutorials/uk.yaml b/content/tutorials/uk.yaml index ca9863724ed..8ba3238afa2 100644 --- a/content/tutorials/uk.yaml +++ b/content/tutorials/uk.yaml @@ -41,7 +41,7 @@ intro: text: Можеш зберегти і поширити всі свої програми з іншими користувачами Hedy. 14: title: Шпаргалка - text: Якщо ти забув команду, можеш скористатись шпаргалкою. На ній э список всіх команд які ти можеш використати на цьому рівні. + text: Якщо ти забув команду, можеш скористатись шпаргалкою. На ній э список всіх команд які ти можеш використати на цьому рівні. Ти знайдеш підказку у кнопці 🤔 15: title: Кінець! text: Натисни 'наступний крок' і почни програмувати по справжньому! diff --git a/grammars/level4-Additions.lark b/grammars/level4-Additions.lark index 129fab09a37..c56618ce16a 100644 --- a/grammars/level4-Additions.lark +++ b/grammars/level4-Additions.lark @@ -1,9 +1,14 @@ // redefining it entirely since it has many order-depending rules (e.g ask_no_quotes should be after ask and before assign) -command: clear | print | ask | turtle | assign_list | add | remove | sleep | error_list_access | error_ask_no_quotes| assign | error_invalid_space | error_print_no_quotes | error_text_no_print |error_invalid | empty_line +command: clear | print | ask | turtle | assign_list | add | remove | sleep | error_list_access | error_ask_no_quotes| assign | error_invalid_space | error_print_no_quotes | error_print_one_quote_only | error_text_no_print |error_invalid | empty_line print: _PRINT (_print_argument)? -> print error_print_no_quotes: _PRINT text -> error_print_nq +textwithoutsinglequote: /([^\n']+)/ -> text +textwithoutdoublequote: /([^\n"]+)/ -> text +error_print_one_quote_only: _PRINT "'" textwithoutsinglequote -> error_print_nq | _PRINT "\"" textwithoutdoublequote -> error_print_nq | _PRINT textwithoutsinglequote "'" -> error_print_nq | _PRINT textwithoutdoublequote "\"" -> error_print_nq + + // FH, feb 2023 Shall we rename this 'var' to declare maybe? I confused myself :) ask: var _IS _ASK (_print_argument)? error_ask_no_quotes: var _IS _ASK text -> error_print_nq @@ -20,6 +25,8 @@ error_text_no_print: quoted_text textwithoutspaces: /([^\n،,,、 ]+)/ -> text + + quoted_text: (/'((?:[^\\']|\\.)*)'/ | /"((?:[^\\"]|\\.)*)"/ | /‘((?:[^\\‘]|\\.)*)’/ | /“((?:[^\\”]|\\.)*)”/ | /«((?:[^\\»]|\\.)*)»/ ) -> text //text can be between single or double quotes, but quotes may be escaped with \ diff --git a/grammars/level5-Additions.lark b/grammars/level5-Additions.lark index e86d74bbee0..39b1ca24e8f 100644 --- a/grammars/level5-Additions.lark +++ b/grammars/level5-Additions.lark @@ -42,7 +42,7 @@ nospace: /[^\n, ]/ textwithspaces: /(?:[^#\n،,,、 ]| (?!else|başka|faese|अन्यथा|否则|muuten|muidu|senão|ellers|alie|altfel|иначе|inače|altrimenti|інакше|lainnya|arall|annars|değilse|anders|ndryshe|inaczej|sinon|ไม่อย่างนั้น|sonst|లేకపోతే|sino|ورنہ|وکھرا|אחרת|وإلا))+/ -> text //anything can be parsed except for a newline and a comma for list separators //a space is allowed, but it may not be followed by an else. The part " (?!else))" means space not followed by (negative look ahead) else //That is because allowing else in strings leads to issue #303 -textwithoutspaces: /(?:[^#\n،,,、 *+\-\/eidіиలేไamfnsbअ否אو]|א(?!חרת )|و(?!إلا |کھرا |رنہ)|否(?!则 )|अ(?!न्यथा )|и(?!наче )|m(?!uidu |uuten )|d(?!eğilse )|b(?!aşka )|n(?!dryshe )|ไ(?!ม่อย่างนั้น )|l(?!ainnya )|f(?!aese )|e(?!lse |llers )|s(?!inon |enão |ino |onst )|і(?!накше )|i(?!naczej |nače )|లే (?!కపోతే )|a(?!nders |lie |ltfel |ltrimenti |nnars |rall ))+/ -> text //anything can be parsed except for spaces (plus: a newline and a comma for list separators) +textwithoutspaces: /(?:[^#\n،,,、 *+\-\/eidіиlలేไamfnsbअ否אو]|א(?!חרת )|و(?!إلا |کھرا |رنہ)|否(?!则 )|अ(?!न्यथा )|и(?!наче )|m(?!uidu |uuten )|d(?!eğilse )|b(?!aşka )|n(?!dryshe )|ไ(?!ม่อย่างนั้น )|l(?!ainnya )|f(?!aese )|e(?!lse |llers )|s(?!inon |enão |ino |onst )|і(?!накше )|i(?!naczej |nače )|లే (?!కపోతే )|a(?!nders |lie |ltfel |ltrimenti |nnars |rall ))+/ -> text //anything can be parsed except for spaces (plus: a newline and a comma for list separators) //the part e(?!lse)|i(?!f)) means e not followed by lse, and i not followed by f // this is because allowing else and if in invalid leads to ambiguity in the grammar // note that the i's look similar but are not: inaczej versus інакше! diff --git a/grammars/level6-Additions.lark b/grammars/level6-Additions.lark index d802a381c93..7e900ab5a8b 100644 --- a/grammars/level6-Additions.lark +++ b/grammars/level6-Additions.lark @@ -2,8 +2,8 @@ _print_argument: (_SPACE | quoted_text | list_access | expression | print_expres ?print_expression: var_access_print | error_unsupported_number | INT // redefining it entirely since it has many order-depending rules -command: clear | print | turtle | add | remove | sleep | error_print_no_quotes | ifpressed_else | error_ifpressed_missing_else | ifelse | ifs | ask | error_ask_no_quotes| assign_button | assign | assign_list | error_invalid_space | error_text_no_print | empty_line -_if_less_command: print | turtle | add | remove | sleep | error_print_no_quotes | ask | error_ask_no_quotes | assign_button | assign | assign_list +command: clear | print | turtle | add | remove | sleep | error_print_no_quotes | error_print_one_quote_only | ifpressed_else | error_ifpressed_missing_else | ifelse | ifs | ask | error_ask_no_quotes| assign_button | assign | assign_list | error_invalid_space | error_text_no_print | empty_line +_if_less_command: print | turtle | add | remove | sleep | error_print_no_quotes | error_print_one_quote_only | ask | error_ask_no_quotes | assign_button | assign | assign_list //splitting these commands into two rules, one for equals and one for is so they can be properly handled in the translator ask: var (_IS | _EQUALS) _ASK (_print_argument)? diff --git a/static/css/generated.css b/static/css/generated.css index 77ae3044f9a..a9b2a9bf11e 100644 --- a/static/css/generated.css +++ b/static/css/generated.css @@ -1,4515 +1 @@ -/* -! tailwindcss v3.3.3 | MIT License | https://tailwindcss.com -*/ - -/* -1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) -2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) -*/ - -*, -::before, -::after { - box-sizing: border-box; - /* 1 */ - border-width: 0; - /* 2 */ - border-style: solid; - /* 2 */ - border-color: #edf2f7; - /* 2 */ -} - -::before, -::after { - --tw-content: ''; -} - -/* -1. Use a consistent sensible line-height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -3. Use a more readable tab size. -4. Use the user's configured `sans` font-family by default. -5. Use the user's configured `sans` font-feature-settings by default. -6. Use the user's configured `sans` font-variation-settings by default. -*/ - -html { - line-height: 1.5; - /* 1 */ - -webkit-text-size-adjust: 100%; - /* 2 */ - -moz-tab-size: 4; - /* 3 */ - -o-tab-size: 4; - tab-size: 4; - /* 3 */ - font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - /* 4 */ - font-feature-settings: normal; - /* 5 */ - font-variation-settings: normal; - /* 6 */ -} - -/* -1. Remove the margin in all browsers. -2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. -*/ - -body { - margin: 0; - /* 1 */ - line-height: inherit; - /* 2 */ -} - -/* -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -3. Ensure horizontal rules are visible by default. -*/ - -hr { - height: 0; - /* 1 */ - color: inherit; - /* 2 */ - border-top-width: 1px; - /* 3 */ -} - -/* -Add the correct text decoration in Chrome, Edge, and Safari. -*/ - -abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} - -/* -Remove the default font size and weight for headings. -*/ - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/* -Reset links to optimize for opt-in styling instead of opt-out. -*/ - -a { - color: inherit; - text-decoration: inherit; -} - -/* -Add the correct font weight in Edge and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/* -1. Use the user's configured `mono` font family by default. -2. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -samp, -pre { - font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - /* 1 */ - font-size: 1em; - /* 2 */ -} - -/* -Add the correct font size in all browsers. -*/ - -small { - font-size: 80%; -} - -/* -Prevent `sub` and `sup` elements from affecting the line height in all browsers. -*/ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -3. Remove gaps between table borders by default. -*/ - -table { - text-indent: 0; - /* 1 */ - border-color: inherit; - /* 2 */ - border-collapse: collapse; - /* 3 */ -} - -/* -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -3. Remove default padding in all browsers. -*/ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - /* 1 */ - font-feature-settings: inherit; - /* 1 */ - font-variation-settings: inherit; - /* 1 */ - font-size: 100%; - /* 1 */ - font-weight: inherit; - /* 1 */ - line-height: inherit; - /* 1 */ - color: inherit; - /* 1 */ - margin: 0; - /* 2 */ - padding: 0; - /* 3 */ -} - -/* -Remove the inheritance of text transform in Edge and Firefox. -*/ - -button, -select { - text-transform: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Remove default button styles. -*/ - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; - /* 1 */ - background-color: transparent; - /* 2 */ - background-image: none; - /* 2 */ -} - -/* -Use the modern Firefox focus style for all focusable elements. -*/ - -:-moz-focusring { - outline: auto; -} - -/* -Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) -*/ - -:-moz-ui-invalid { - box-shadow: none; -} - -/* -Add the correct vertical alignment in Chrome and Firefox. -*/ - -progress { - vertical-align: baseline; -} - -/* -Correct the cursor style of increment and decrement buttons in Safari. -*/ - -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} - -/* -1. Correct the odd appearance in Chrome and Safari. -2. Correct the outline style in Safari. -*/ - -[type='search'] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ -} - -/* -Remove the inner padding in Chrome and Safari on macOS. -*/ - -::-webkit-search-decoration { - -webkit-appearance: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to `inherit` in Safari. -*/ - -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} - -/* -Add the correct display in Chrome and Safari. -*/ - -summary { - display: list-item; -} - -/* -Removes the default spacing and border for appropriate elements. -*/ - -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} - -fieldset { - margin: 0; - padding: 0; -} - -legend { - padding: 0; -} - -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} - -/* -Reset default styling for dialogs. -*/ - -dialog { - padding: 0; -} - -/* -Prevent resizing textareas horizontally by default. -*/ - -textarea { - resize: vertical; -} - -/* -1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) -2. Set the default placeholder color to the user's configured gray 400 color. -*/ - -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; - /* 1 */ - color: #cbd5e0; - /* 2 */ -} - -input::placeholder, -textarea::placeholder { - opacity: 1; - /* 1 */ - color: #cbd5e0; - /* 2 */ -} - -/* -Set the default cursor for buttons. -*/ - -button, -[role="button"] { - cursor: pointer; -} - -/* -Make sure disabled buttons don't get the pointer cursor. -*/ - -:disabled { - cursor: default; -} - -/* -1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) -2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) - This can trigger a poorly considered lint error in some tools but is included by design. -*/ - -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; - /* 1 */ - vertical-align: middle; - /* 2 */ -} - -/* -Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) -*/ - -img, -video { - max-width: 100%; - height: auto; -} - -/* Make elements with the HTML hidden attribute stay hidden by default */ - -[hidden] { - display: none; -} - -*, ::before, ::after { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(66 153 225 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; -} - -::backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(66 153 225 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; -} - -html { - font-weight: 300; - /* https://stackoverflow.com/questions/1417934/how-to-prevent-scrollbar-from-repositioning-web-page */ - overflow-x: hidden; - margin-right: calc(-1 * (100vw - 100%)); -} - -.font-slab { - font-family: 'Balsamiq Sans', sans-serif; -} - -.dot { - height: 25px; - width: 25px; - border-radius: 50%; - display: inline-block; -} - -h1 { - font-size: 2.25rem; - font-weight: 200; -} - -h2 { - font-size: 1.5rem; - font-weight: 700; -} - -h3 { - font-size: 1.5rem; - font-weight: 700; -} - -h4 { - font-size: 1rem; - font-weight: 700; -} - -/* TB: Why do we have this? It makes it (a lot) harder to style these element within the templates... */ - -* + p, * + ul, * + ol, * + pre { - margin-top: 1rem; -} - -a { - font-weight: 600; - --tw-text-opacity: 1; - color: rgb(99 179 237 / var(--tw-text-opacity)); - text-decoration: underline; -} - -strong { - font-weight: 700; -} - -.tiny-btn { - border-bottom-width: 2px; - padding-left: 0.5rem; - padding-right: 0.5rem; - padding-top: 0.25rem; - font-size: 0.875rem; -} - -/* Container for pages which are not the main code page and not copy pages */ - -.common-page-container { - margin-left: auto; - margin-right: auto; - width: 100%; - max-width: 1536px; - padding: 2rem; -} - -/* For main page content */ - -.copy-container { - margin-left: auto; - margin-right: auto; - max-width: 1024px; -} - -.copy-container-wide { - margin-left: auto; - margin-right: auto; - max-width: 1280px; -} - -.text-display-copy, .text-business-copy { - line-height: 1.625; -} - -/* Apply somewhat fancy styles to running text (good for landing page copy) */ - -.text-display-copy h2 { - text-align: center; - font-size: 2.25rem; - --tw-text-opacity: 1; - color: rgb(213 63 140 / var(--tw-text-opacity)); -} - -.text-display-copy h3 { - font-size: 2.25rem; - --tw-text-opacity: 1; - color: rgb(213 63 140 / var(--tw-text-opacity)); -} - -.text-display-copy .columns h3 { - font-size: 1.5rem; -} - -/** - * text-business-copy - * - * For Real Business Value(tm). - */ - -.text-business-copy { -} - -.text-business-copy h3:first-child { - margin-top: 0px; -} - -.text-business-copy * + h3 { - margin-top: 2rem; -} - -.btn-shape { - font-weight: 400; - line-height: 1.5rem; - letter-spacing: 0.025em; - font-family: 'Balsamiq Sans', sans-serif; - border-radius: 0.25rem; - border-width: 1px; - border-bottom-width: 4px; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.25rem; - text-decoration-line: none; - display: inline-block; -} - -.green-btn { - font-weight: 400; - line-height: 1.5rem; - letter-spacing: 0.025em; - font-family: 'Balsamiq Sans', sans-serif; - border-radius: 0.25rem; - border-width: 1px; - border-bottom-width: 4px; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.25rem; - text-decoration-line: none; - display: inline-block; - --tw-border-opacity: 1; - border-color: rgb(47 133 90 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(72 187 120 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.green-btn:disabled, .green-btn[disabled] { - --tw-border-opacity: 1; - border-color: rgb(74 85 104 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(160 174 192 / var(--tw-bg-opacity)); -} - -.stripe-colored { - border-bottom-width: 4px; - --tw-border-opacity: 1; - border-color: rgb(236 201 75 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(246 224 94 / var(--tw-bg-opacity)); -} - -.stripe-white { - border-bottom-width: 4px; -} - -.stripe-colored h2, .stripe-colored a { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.stripe-colored .column-pane a { - --tw-text-opacity: 1; - color: rgb(43 108 176 / var(--tw-text-opacity)); -} - -.stripe-colored .column-pane { - border-radius: 0.5rem; - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.heading-underline { - margin-left: auto; - margin-right: auto; - margin-top: 2rem; - margin-bottom: 2rem; - height: 0.25rem; - width: 9rem; - --tw-bg-opacity: 1; - background-color: rgb(213 63 140 / var(--tw-bg-opacity)); -} - -.stripe-colored .heading-underline { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} - -.text-links-plain a { - color: inherit; - text-decoration: none; - font-weight: inherit; -} - -.tooltip { - position: relative; - display: inline-block; -} - -.tooltip .tooltiptext { - visibility: hidden; - position: absolute; - align-items: center; - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(229 62 62 / var(--tw-text-opacity)); - width: 130; - bottom: 150%; - left: 50%; - margin-left: -80px; -} - -.tooltip:hover .tooltiptext { - visibility: visible; -} - -.tooltip .tooltiptext::after { - position: absolute; - content: " "; - top: 100%; - /* At the bottom of the tooltip */ - left: 50%; - margin-left: -10px; - border-width: 10px; - border-style: solid; - border-color: white transparent transparent transparent; -} - -.green-btn:hover:enabled, -a.green-btn:hover { - --tw-border-opacity: 1; - border-color: rgb(72 187 120 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(104 211 145 / var(--tw-bg-opacity)); -} - -.green-btn:hover:enabled:active, -a.green-btn:hover:active { - --tw-border-opacity: 1; - border-color: rgb(47 133 90 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(47 133 90 / var(--tw-bg-opacity)); -} - -.red-btn { - font-weight: 400; - line-height: 1.5rem; - letter-spacing: 0.025em; - font-family: 'Balsamiq Sans', sans-serif; - border-radius: 0.25rem; - border-width: 1px; - border-bottom-width: 4px; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.25rem; - text-decoration-line: none; - display: inline-block; - --tw-border-opacity: 1; - border-color: rgb(197 48 48 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(245 101 101 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.red-btn:hover { - --tw-border-opacity: 1; - border-color: rgb(245 101 101 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(252 129 129 / var(--tw-bg-opacity)); -} - -.red-btn:hover:active { - --tw-border-opacity: 1; - border-color: rgb(197 48 48 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(197 48 48 / var(--tw-bg-opacity)); -} - -.yellow-btn { - font-weight: 400; - line-height: 1.5rem; - letter-spacing: 0.025em; - font-family: 'Balsamiq Sans', sans-serif; - border-radius: 0.25rem; - border-width: 1px; - border-bottom-width: 4px; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.25rem; - text-decoration-line: none; - display: inline-block; - --tw-border-opacity: 1; - border-color: rgb(183 121 31 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(236 201 75 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(0 0 0 / var(--tw-text-opacity)); -} - -.yellow-btn:hover { - --tw-border-opacity: 1; - border-color: rgb(236 201 75 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(246 224 94 / var(--tw-bg-opacity)); -} - -.yellow-btn:hover:active { - --tw-border-opacity: 1; - border-color: rgb(183 121 31 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(183 121 31 / var(--tw-bg-opacity)); -} - -.pink-btn { - font-weight: 400; - line-height: 1.5rem; - letter-spacing: 0.025em; - font-family: 'Balsamiq Sans', sans-serif; - border-radius: 0.25rem; - border-width: 1px; - border-bottom-width: 4px; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.25rem; - text-decoration-line: none; - display: inline-block; - --tw-border-opacity: 1; - border-color: rgb(237 100 166 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(246 135 179 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.pink-btn:hover { - --tw-border-opacity: 1; - border-color: rgb(246 135 179 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(251 182 206 / var(--tw-bg-opacity)); -} - -.pink-btn:hover:active { - --tw-border-opacity: 1; - border-color: rgb(237 100 166 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(184 50 128 / var(--tw-bg-opacity)); -} - -.blue-btn { - font-weight: 400; - line-height: 1.5rem; - letter-spacing: 0.025em; - font-family: 'Balsamiq Sans', sans-serif; - border-radius: 0.25rem; - border-width: 1px; - border-bottom-width: 4px; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.25rem; - text-decoration-line: none; - display: inline-block; - --tw-border-opacity: 1; - border-color: rgb(43 108 176 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(66 153 225 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.blue-btn:hover { - --tw-border-opacity: 1; - border-color: rgb(66 153 225 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(99 179 237 / var(--tw-bg-opacity)); -} - -.blue-btn:hover:active { - --tw-border-opacity: 1; - border-color: rgb(43 108 176 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(43 108 176 / var(--tw-bg-opacity)); -} - -.gray-btn { - font-weight: 400; - line-height: 1.5rem; - letter-spacing: 0.025em; - font-family: 'Balsamiq Sans', sans-serif; - border-radius: 0.25rem; - border-width: 1px; - border-bottom-width: 4px; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.25rem; - text-decoration-line: none; - display: inline-block; - --tw-border-opacity: 1; - border-color: rgb(74 85 104 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(160 174 192 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.gray-btn:hover { - --tw-border-opacity: 1; - border-color: rgb(160 174 192 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(203 213 224 / var(--tw-bg-opacity)); -} - -.gray-btn:hover:active { - --tw-border-opacity: 1; - border-color: rgb(74 85 104 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(74 85 104 / var(--tw-bg-opacity)); -} - -/* Styles only for use in MarkDown blocks */ - -/* NOTE: I'm pretty sure we don't render class="markdown" anymore anywhere */ - -.markdown { - font-size: 1.25rem; - line-height: 1.5; - --tw-text-opacity: 1; - color: rgb(45 55 72 / var(--tw-text-opacity)); -} - -.markdown li + li, .markdown li > p + p { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} - -.markdown strong { - font-weight: 700; -} - -.markdown * + h1 { - margin-bottom: 0.5rem; - margin-top: 2.5rem; - line-height: 1.25; -} - -h2 { - font-weight: 500; - --tw-text-opacity: 1; - color: rgb(66 153 225 / var(--tw-text-opacity)); - font-family: 'Balsamiq Sans', sans-serif; - margin-bottom: 0.5rem; - margin-top: 2.5rem; - font-size: 1.5rem; - line-height: 1.25; -} - -h2:first-child { - margin-top: 0; -} - -h3 { - --tw-text-opacity: 1; - color: rgb(43 108 176 / var(--tw-text-opacity)); - font-family: 'Balsamiq Sans', sans-serif; - margin-top: 1rem; - margin-bottom: 0.25rem; - font-size: 1.25rem; - line-height: 1.25; -} - -h4 { - margin-top: 1rem; - margin-bottom: 0.5rem; -} - -pre, code { -} - -.markdown code { - padding-top: 0.25rem; - padding-bottom: 0.25rem; - padding-left: 0.25rem; - padding-right: 0.25rem; - font-size: 1rem; -} - -pre code { - margin-top: 0.5rem; - margin-bottom: 0.5rem; - display: block; - border-radius: 0.25rem; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(226 232 240 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(237 242 247 / var(--tw-bg-opacity)); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - font-size: 1rem; - --tw-text-opacity: 1; - color: rgb(229 62 62 / var(--tw-text-opacity)); -} - -pre { - white-space: pre-wrap; -} - -/** - * A container for Ace editors that adds a little padding around it - * - * (It looks nicer if the text isn't all the way up to the margin - */ - -.ace-container { - background-color: #272822; - border-radius: 0.25rem; - padding: 0.5rem; -} - -/* Code in a fenced code block (``` in MarkDown) */ - -pre, pre code { - font-size: 100%; - color: white; -} - -/* All code (` and ```) */ - -code { - display: inline; - border-radius: 0.25rem; - padding-top: 0.25rem; - padding-bottom: 0.25rem; - padding-left: 0.5rem; - padding-right: 0.5rem; - font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-weight: 400; - background: #272822 !important; - color: #ff6188; - font-size: 90%; -} - -.markdown blockquote { - border-left-width: 4px; - --tw-border-opacity: 1; - border-color: rgb(226 232 240 / var(--tw-border-opacity)); - font-style: italic; -} - -:is([dir="ltr"] .markdown blockquote) { - padding-left: 1rem; -} - -:is([dir="rtl"] .markdown blockquote) { - padding-right: 1rem; -} - -.container { - width: 100%; -} - -@media (min-width: 640px) { - .container { - max-width: 640px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 768px; - } -} - -@media (min-width: 1024px) { - .container { - max-width: 1024px; - } -} - -@media (min-width: 1280px) { - .container { - max-width: 1280px; - } -} - -@media (min-width: 1536px) { - .container { - max-width: 1536px; - } -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} - -.visible { - visibility: visible; -} - -.invisible { - visibility: hidden; -} - -.static { - position: static; -} - -.fixed { - position: fixed; -} - -.absolute { - position: absolute; -} - -.relative { - position: relative; -} - -.sticky { - position: sticky; -} - -.inset-0 { - inset: 0px; -} - -.-top-1 { - top: -0.25rem; -} - -.bottom-0 { - bottom: 0px; -} - -.left-0 { - left: 0px; -} - -.left-1\/2 { - left: 50%; -} - -.right-0 { - right: 0px; -} - -.right-0\.5 { - right: 0.125rem; -} - -.right-2 { - right: 0.5rem; -} - -.top-0 { - top: 0px; -} - -.top-0\.5 { - top: 0.125rem; -} - -.top-16 { - top: 4rem; -} - -.top-2 { - top: 0.5rem; -} - -.z-10 { - z-index: 10; -} - -.z-20 { - z-index: 20; -} - -.z-30 { - z-index: 30; -} - -.z-40 { - z-index: 40; -} - -.z-50 { - z-index: 50; -} - -.order-1 { - order: 1; -} - -.order-2 { - order: 2; -} - -.order-3 { - order: 3; -} - -.order-5 { - order: 5; -} - -.col-span-2 { - grid-column: span 2 / span 2; -} - -.col-start-1 { - grid-column-start: 1; -} - -.col-start-2 { - grid-column-start: 2; -} - -.row-span-2 { - grid-row: span 2 / span 2; -} - -.float-right { - float: right; -} - -.m-1 { - margin: 0.25rem; -} - -.m-2 { - margin: 0.5rem; -} - -.m-4 { - margin: 1rem; -} - -.m-8 { - margin: 2rem; -} - -.m-auto { - margin: auto; -} - -.mx-0 { - margin-left: 0px; - margin-right: 0px; -} - -.mx-16 { - margin-left: 4rem; - margin-right: 4rem; -} - -.mx-2 { - margin-left: 0.5rem; - margin-right: 0.5rem; -} - -.mx-4 { - margin-left: 1rem; - margin-right: 1rem; -} - -.mx-auto { - margin-left: auto; - margin-right: auto; -} - -.my-0 { - margin-top: 0px; - margin-bottom: 0px; -} - -.my-1 { - margin-top: 0.25rem; - margin-bottom: 0.25rem; -} - -.my-10 { - margin-top: 2.5rem; - margin-bottom: 2.5rem; -} - -.my-16 { - margin-top: 4rem; - margin-bottom: 4rem; -} - -.my-2 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} - -.my-4 { - margin-top: 1rem; - margin-bottom: 1rem; -} - -.my-5 { - margin-top: 1.25rem; - margin-bottom: 1.25rem; -} - -.my-8 { - margin-top: 2rem; - margin-bottom: 2rem; -} - -.my-auto { - margin-top: auto; - margin-bottom: auto; -} - -.-mb-px { - margin-bottom: -1px; -} - -.-ml-32 { - margin-left: -8rem; -} - -.-mr-6 { - margin-right: -1.5rem; -} - -.-mt-2 { - margin-top: -0.5rem; -} - -.-mt-8 { - margin-top: -2rem; -} - -.mb-0 { - margin-bottom: 0px; -} - -.mb-1 { - margin-bottom: 0.25rem; -} - -.mb-10 { - margin-bottom: 2.5rem; -} - -.mb-2 { - margin-bottom: 0.5rem; -} - -.mb-4 { - margin-bottom: 1rem; -} - -.mb-6 { - margin-bottom: 1.5rem; -} - -.mb-8 { - margin-bottom: 2rem; -} - -.ml-0 { - margin-left: 0px; -} - -.ml-1 { - margin-left: 0.25rem; -} - -.ml-14 { - margin-left: 3.5rem; -} - -.ml-2 { - margin-left: 0.5rem; -} - -.ml-4 { - margin-left: 1rem; -} - -.ml-6 { - margin-left: 1.5rem; -} - -.ml-auto { - margin-left: auto; -} - -.mr-1 { - margin-right: 0.25rem; -} - -.mr-2 { - margin-right: 0.5rem; -} - -.mr-4 { - margin-right: 1rem; -} - -.mr-5 { - margin-right: 1.25rem; -} - -.mr-8 { - margin-right: 2rem; -} - -.mt-0 { - margin-top: 0px; -} - -.mt-0\.5 { - margin-top: 0.125rem; -} - -.mt-1 { - margin-top: 0.25rem; -} - -.mt-10 { - margin-top: 2.5rem; -} - -.mt-2 { - margin-top: 0.5rem; -} - -.mt-24 { - margin-top: 6rem; -} - -.mt-28 { - margin-top: 7rem; -} - -.mt-3 { - margin-top: 0.75rem; -} - -.mt-4 { - margin-top: 1rem; -} - -.mt-5 { - margin-top: 1.25rem; -} - -.mt-8 { - margin-top: 2rem; -} - -.mt-auto { - margin-top: auto; -} - -.block { - display: block; -} - -.inline-block { - display: inline-block; -} - -.inline { - display: inline; -} - -.flex { - display: flex; -} - -.inline-flex { - display: inline-flex; -} - -.table { - display: table; -} - -.grid { - display: grid; -} - -.contents { - display: contents; -} - -.hidden { - display: none; -} - -.aspect-\[2\/3\] { - aspect-ratio: 2/3; -} - -.h-10 { - height: 2.5rem; -} - -.h-12 { - height: 3rem; -} - -.h-14 { - height: 3.5rem; -} - -.h-16 { - height: 4rem; -} - -.h-2 { - height: 0.5rem; -} - -.h-24 { - height: 6rem; -} - -.h-28 { - height: 7rem; -} - -.h-32 { - height: 8rem; -} - -.h-4 { - height: 1rem; -} - -.h-40 { - height: 10rem; -} - -.h-6 { - height: 1.5rem; -} - -.h-64 { - height: 16rem; -} - -.h-8 { - height: 2rem; -} - -.h-80 { - height: 20rem; -} - -.h-96 { - height: 24rem; -} - -.h-auto { - height: auto; -} - -.h-full { - height: 100%; -} - -.h-min { - height: -moz-min-content; - height: min-content; -} - -.h-screen { - height: 100vh; -} - -.max-h-56 { - max-height: 14rem; -} - -.min-h-\[3\.5rem\] { - min-height: 3.5rem; -} - -.min-h-full { - min-height: 100%; -} - -.min-h-screen { - min-height: 100vh; -} - -.w-1\/12 { - width: 8.333333%; -} - -.w-1\/2 { - width: 50%; -} - -.w-1\/3 { - width: 33.333333%; -} - -.w-10 { - width: 2.5rem; -} - -.w-10\/12 { - width: 83.333333%; -} - -.w-12 { - width: 3rem; -} - -.w-14 { - width: 3.5rem; -} - -.w-16 { - width: 4rem; -} - -.w-2 { - width: 0.5rem; -} - -.w-2\/12 { - width: 16.666667%; -} - -.w-2\/3 { - width: 66.666667%; -} - -.w-24 { - width: 6rem; -} - -.w-3\/4 { - width: 75%; -} - -.w-32 { - width: 8rem; -} - -.w-4 { - width: 1rem; -} - -.w-4\/5 { - width: 80%; -} - -.w-40 { - width: 10rem; -} - -.w-56 { - width: 14rem; -} - -.w-6 { - width: 1.5rem; -} - -.w-64 { - width: 16rem; -} - -.w-72 { - width: 18rem; -} - -.w-8 { - width: 2rem; -} - -.w-80 { - width: 20rem; -} - -.w-96 { - width: 24rem; -} - -.w-auto { - width: auto; -} - -.w-fit { - width: -moz-fit-content; - width: fit-content; -} - -.w-full { - width: 100%; -} - -.w-max { - width: -moz-max-content; - width: max-content; -} - -.w-min { - width: -moz-min-content; - width: min-content; -} - -.w-px { - width: 1px; -} - -.w-screen { - width: 100vw; -} - -.min-w-\[100px\] { - min-width: 100px; -} - -.min-w-\[200px\] { - min-width: 200px; -} - -.min-w-min { - min-width: -moz-min-content; - min-width: min-content; -} - -.max-w-3xl { - max-width: 48rem; -} - -.max-w-full { - max-width: 100%; -} - -.max-w-lg { - max-width: 32rem; -} - -.max-w-md { - max-width: 28rem; -} - -.max-w-prose { - max-width: 65ch; -} - -.max-w-screen-2xl { - max-width: 1536px; -} - -.max-w-screen-lg { - max-width: 1024px; -} - -.max-w-screen-md { - max-width: 768px; -} - -.max-w-screen-xl { - max-width: 1280px; -} - -.max-w-xl { - max-width: 36rem; -} - -.flex-1 { - flex: 1 1 0%; -} - -.flex-initial { - flex: 0 1 auto; -} - -.flex-none { - flex: none; -} - -.flex-grow { - flex-grow: 1; -} - -.basis-1\/3 { - flex-basis: 33.333333%; -} - -.basis-2\/3 { - flex-basis: 66.666667%; -} - -.table-auto { - table-layout: auto; -} - -.border-separate { - border-collapse: separate; -} - -.border-spacing-2 { - --tw-border-spacing-x: 0.5rem; - --tw-border-spacing-y: 0.5rem; - border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y); -} - -.-translate-x-1\/2 { - --tw-translate-x: -50%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.-translate-y-8 { - --tw-translate-y: -2rem; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-y-6 { - --tw-translate-y: 1.5rem; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-y-8 { - --tw-translate-y: 2rem; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.rotate-180 { - --tw-rotate: 180deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.transform { - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.cursor-pointer { - cursor: pointer; -} - -.resize { - resize: both; -} - -.list-inside { - list-style-position: inside; -} - -.list-none { - list-style-type: none; -} - -.appearance-none { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.grid-flow-row-dense { - grid-auto-flow: row dense; -} - -.grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); -} - -.grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); -} - -.flex-row { - flex-direction: row; -} - -.flex-col { - flex-direction: column; -} - -.flex-wrap { - flex-wrap: wrap; -} - -.content-start { - align-content: flex-start; -} - -.items-start { - align-items: flex-start; -} - -.items-center { - align-items: center; -} - -.items-stretch { - align-items: stretch; -} - -.justify-start { - justify-content: flex-start; -} - -.justify-end { - justify-content: flex-end; -} - -.justify-center { - justify-content: center; -} - -.justify-between { - justify-content: space-between; -} - -.justify-around { - justify-content: space-around; -} - -.gap-1 { - gap: 0.25rem; -} - -.gap-16 { - gap: 4rem; -} - -.gap-2 { - gap: 0.5rem; -} - -.gap-4 { - gap: 1rem; -} - -.gap-6 { - gap: 1.5rem; -} - -.gap-8 { - gap: 2rem; -} - -.gap-x-12 { - -moz-column-gap: 3rem; - column-gap: 3rem; -} - -.gap-x-2 { - -moz-column-gap: 0.5rem; - column-gap: 0.5rem; -} - -.gap-x-4 { - -moz-column-gap: 1rem; - column-gap: 1rem; -} - -.gap-y-16 { - row-gap: 4rem; -} - -.space-x-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.75rem * var(--tw-space-x-reverse)); - margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-y-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); -} - -.space-y-6 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); -} - -.divide-blue-300 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-opacity: 1; - border-color: rgb(144 205 244 / var(--tw-divide-opacity)); -} - -.divide-blue-400 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-opacity: 1; - border-color: rgb(99 179 237 / var(--tw-divide-opacity)); -} - -.place-self-center { - place-self: center; -} - -.self-end { - align-self: flex-end; -} - -.self-center { - align-self: center; -} - -.overflow-auto { - overflow: auto; -} - -.overflow-hidden { - overflow: hidden; -} - -.overflow-visible { - overflow: visible; -} - -.overflow-x-auto { - overflow-x: auto; -} - -.overflow-x-hidden { - overflow-x: hidden; -} - -.overflow-y-hidden { - overflow-y: hidden; -} - -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.whitespace-nowrap { - white-space: nowrap; -} - -.whitespace-pre-wrap { - white-space: pre-wrap; -} - -.break-words { - overflow-wrap: break-word; -} - -.rounded { - border-radius: 0.25rem; -} - -.rounded-full { - border-radius: 9999px; -} - -.rounded-lg { - border-radius: 0.5rem; -} - -.rounded-md { - border-radius: 0.375rem; -} - -.rounded-xl { - border-radius: 0.75rem; -} - -.rounded-b { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.rounded-b-lg { - border-bottom-right-radius: 0.5rem; - border-bottom-left-radius: 0.5rem; -} - -.rounded-t-lg { - border-top-left-radius: 0.5rem; - border-top-right-radius: 0.5rem; -} - -.border { - border-width: 1px; -} - -.border-0 { - border-width: 0px; -} - -.border-2 { - border-width: 2px; -} - -.border-4 { - border-width: 4px; -} - -.border-8 { - border-width: 8px; -} - -.border-b { - border-bottom-width: 1px; -} - -.border-b-2 { - border-bottom-width: 2px; -} - -.border-b-4 { - border-bottom-width: 4px; -} - -.border-b-8 { - border-bottom-width: 8px; -} - -.border-l { - border-left-width: 1px; -} - -.border-r { - border-right-width: 1px; -} - -.border-t { - border-top-width: 1px; -} - -.border-t-2 { - border-top-width: 2px; -} - -.border-t-4 { - border-top-width: 4px; -} - -.border-solid { - border-style: solid; -} - -.border-dashed { - border-style: dashed; -} - -.border-black { - --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); -} - -.border-blue-300 { - --tw-border-opacity: 1; - border-color: rgb(144 205 244 / var(--tw-border-opacity)); -} - -.border-blue-400 { - --tw-border-opacity: 1; - border-color: rgb(99 179 237 / var(--tw-border-opacity)); -} - -.border-blue-500 { - --tw-border-opacity: 1; - border-color: rgb(66 153 225 / var(--tw-border-opacity)); -} - -.border-blue-600 { - --tw-border-opacity: 1; - border-color: rgb(49 130 206 / var(--tw-border-opacity)); -} - -.border-gray-200 { - --tw-border-opacity: 1; - border-color: rgb(237 242 247 / var(--tw-border-opacity)); -} - -.border-gray-400 { - --tw-border-opacity: 1; - border-color: rgb(203 213 224 / var(--tw-border-opacity)); -} - -.border-gray-500 { - --tw-border-opacity: 1; - border-color: rgb(160 174 192 / var(--tw-border-opacity)); -} - -.border-gray-600 { - --tw-border-opacity: 1; - border-color: rgb(113 128 150 / var(--tw-border-opacity)); -} - -.border-green-400 { - --tw-border-opacity: 1; - border-color: rgb(104 211 145 / var(--tw-border-opacity)); -} - -.border-green-500 { - --tw-border-opacity: 1; - border-color: rgb(72 187 120 / var(--tw-border-opacity)); -} - -.border-green-600 { - --tw-border-opacity: 1; - border-color: rgb(56 161 105 / var(--tw-border-opacity)); -} - -.border-orange-400 { - --tw-border-opacity: 1; - border-color: rgb(246 173 85 / var(--tw-border-opacity)); -} - -.border-orange-600 { - --tw-border-opacity: 1; - border-color: rgb(221 107 32 / var(--tw-border-opacity)); -} - -.border-pink-600 { - --tw-border-opacity: 1; - border-color: rgb(213 63 140 / var(--tw-border-opacity)); -} - -.border-purple-600 { - --tw-border-opacity: 1; - border-color: rgb(128 90 213 / var(--tw-border-opacity)); -} - -.border-red-400 { - --tw-border-opacity: 1; - border-color: rgb(252 129 129 / var(--tw-border-opacity)); -} - -.border-red-500 { - --tw-border-opacity: 1; - border-color: rgb(245 101 101 / var(--tw-border-opacity)); -} - -.border-red-600 { - --tw-border-opacity: 1; - border-color: rgb(229 62 62 / var(--tw-border-opacity)); -} - -.border-teal-500 { - --tw-border-opacity: 1; - border-color: rgb(56 178 172 / var(--tw-border-opacity)); -} - -.border-transparent { - border-color: transparent; -} - -.border-white { - --tw-border-opacity: 1; - border-color: rgb(255 255 255 / var(--tw-border-opacity)); -} - -.border-yellow-400 { - --tw-border-opacity: 1; - border-color: rgb(246 224 94 / var(--tw-border-opacity)); -} - -.border-yellow-500 { - --tw-border-opacity: 1; - border-color: rgb(236 201 75 / var(--tw-border-opacity)); -} - -.border-yellow-600 { - --tw-border-opacity: 1; - border-color: rgb(214 158 46 / var(--tw-border-opacity)); -} - -.bg-black { - --tw-bg-opacity: 1; - background-color: rgb(0 0 0 / var(--tw-bg-opacity)); -} - -.bg-blue-100 { - --tw-bg-opacity: 1; - background-color: rgb(235 248 255 / var(--tw-bg-opacity)); -} - -.bg-blue-200 { - --tw-bg-opacity: 1; - background-color: rgb(190 227 248 / var(--tw-bg-opacity)); -} - -.bg-blue-300 { - --tw-bg-opacity: 1; - background-color: rgb(144 205 244 / var(--tw-bg-opacity)); -} - -.bg-blue-400 { - --tw-bg-opacity: 1; - background-color: rgb(99 179 237 / var(--tw-bg-opacity)); -} - -.bg-blue-500 { - --tw-bg-opacity: 1; - background-color: rgb(66 153 225 / var(--tw-bg-opacity)); -} - -.bg-blue-600 { - --tw-bg-opacity: 1; - background-color: rgb(49 130 206 / var(--tw-bg-opacity)); -} - -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(247 250 252 / var(--tw-bg-opacity)); -} - -.bg-gray-200 { - --tw-bg-opacity: 1; - background-color: rgb(237 242 247 / var(--tw-bg-opacity)); -} - -.bg-gray-400 { - --tw-bg-opacity: 1; - background-color: rgb(203 213 224 / var(--tw-bg-opacity)); -} - -.bg-gray-500 { - --tw-bg-opacity: 1; - background-color: rgb(160 174 192 / var(--tw-bg-opacity)); -} - -.bg-gray-800 { - --tw-bg-opacity: 1; - background-color: rgb(45 55 72 / var(--tw-bg-opacity)); -} - -.bg-gray-900 { - --tw-bg-opacity: 1; - background-color: rgb(26 32 44 / var(--tw-bg-opacity)); -} - -.bg-green-100 { - --tw-bg-opacity: 1; - background-color: rgb(240 255 244 / var(--tw-bg-opacity)); -} - -.bg-green-200 { - --tw-bg-opacity: 1; - background-color: rgb(198 246 213 / var(--tw-bg-opacity)); -} - -.bg-green-300 { - --tw-bg-opacity: 1; - background-color: rgb(154 230 180 / var(--tw-bg-opacity)); -} - -.bg-green-500 { - --tw-bg-opacity: 1; - background-color: rgb(72 187 120 / var(--tw-bg-opacity)); -} - -.bg-green-600 { - --tw-bg-opacity: 1; - background-color: rgb(56 161 105 / var(--tw-bg-opacity)); -} - -.bg-indigo-500 { - --tw-bg-opacity: 1; - background-color: rgb(102 126 234 / var(--tw-bg-opacity)); -} - -.bg-orange-300 { - --tw-bg-opacity: 1; - background-color: rgb(251 211 141 / var(--tw-bg-opacity)); -} - -.bg-pink-300 { - --tw-bg-opacity: 1; - background-color: rgb(251 182 206 / var(--tw-bg-opacity)); -} - -.bg-pink-500 { - --tw-bg-opacity: 1; - background-color: rgb(237 100 166 / var(--tw-bg-opacity)); -} - -.bg-pink-800 { - --tw-bg-opacity: 1; - background-color: rgb(151 38 109 / var(--tw-bg-opacity)); -} - -.bg-purple-300 { - --tw-bg-opacity: 1; - background-color: rgb(214 188 250 / var(--tw-bg-opacity)); -} - -.bg-red-100 { - --tw-bg-opacity: 1; - background-color: rgb(255 245 245 / var(--tw-bg-opacity)); -} - -.bg-red-200\/50 { - background-color: rgb(254 215 215 / 0.5); -} - -.bg-red-500 { - --tw-bg-opacity: 1; - background-color: rgb(245 101 101 / var(--tw-bg-opacity)); -} - -.bg-transparent { - background-color: transparent; -} - -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} - -.bg-yellow-100 { - --tw-bg-opacity: 1; - background-color: rgb(255 255 240 / var(--tw-bg-opacity)); -} - -.bg-yellow-200 { - --tw-bg-opacity: 1; - background-color: rgb(254 252 191 / var(--tw-bg-opacity)); -} - -.bg-yellow-300 { - --tw-bg-opacity: 1; - background-color: rgb(250 240 137 / var(--tw-bg-opacity)); -} - -.bg-yellow-400 { - --tw-bg-opacity: 1; - background-color: rgb(246 224 94 / var(--tw-bg-opacity)); -} - -.bg-yellow-500 { - --tw-bg-opacity: 1; - background-color: rgb(236 201 75 / var(--tw-bg-opacity)); -} - -.fill-blue-800 { - fill: #2c5282; -} - -.fill-current { - fill: currentColor; -} - -.fill-green-800 { - fill: #276749; -} - -.fill-orange-800 { - fill: #9c4221; -} - -.fill-pink-800 { - fill: #97266d; -} - -.fill-purple-800 { - fill: #553c9a; -} - -.fill-yellow-800 { - fill: #975a16; -} - -.p-0 { - padding: 0px; -} - -.p-1 { - padding: 0.25rem; -} - -.p-12 { - padding: 3rem; -} - -.p-2 { - padding: 0.5rem; -} - -.p-4 { - padding: 1rem; -} - -.p-5 { - padding: 1.25rem; -} - -.p-6 { - padding: 1.5rem; -} - -.p-8 { - padding: 2rem; -} - -.px-0 { - padding-left: 0px; - padding-right: 0px; -} - -.px-0\.5 { - padding-left: 0.125rem; - padding-right: 0.125rem; -} - -.px-1 { - padding-left: 0.25rem; - padding-right: 0.25rem; -} - -.px-10 { - padding-left: 2.5rem; - padding-right: 2.5rem; -} - -.px-12 { - padding-left: 3rem; - padding-right: 3rem; -} - -.px-16 { - padding-left: 4rem; - padding-right: 4rem; -} - -.px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; -} - -.px-2\.5 { - padding-left: 0.625rem; - padding-right: 0.625rem; -} - -.px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; -} - -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} - -.px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; -} - -.px-8 { - padding-left: 2rem; - padding-right: 2rem; -} - -.py-0 { - padding-top: 0px; - padding-bottom: 0px; -} - -.py-0\.5 { - padding-top: 0.125rem; - padding-bottom: 0.125rem; -} - -.py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} - -.py-12 { - padding-top: 3rem; - padding-bottom: 3rem; -} - -.py-16 { - padding-top: 4rem; - padding-bottom: 4rem; -} - -.py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.py-3 { - padding-top: 0.75rem; - padding-bottom: 0.75rem; -} - -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} - -.py-6 { - padding-top: 1.5rem; - padding-bottom: 1.5rem; -} - -.py-8 { - padding-top: 2rem; - padding-bottom: 2rem; -} - -.pb-0 { - padding-bottom: 0px; -} - -.pb-1 { - padding-bottom: 0.25rem; -} - -.pb-2 { - padding-bottom: 0.5rem; -} - -.pb-4 { - padding-bottom: 1rem; -} - -.pb-6 { - padding-bottom: 1.5rem; -} - -.pl-0 { - padding-left: 0px; -} - -.pl-2 { - padding-left: 0.5rem; -} - -.pl-4 { - padding-left: 1rem; -} - -.pr-2 { - padding-right: 0.5rem; -} - -.pr-8 { - padding-right: 2rem; -} - -.pt-0 { - padding-top: 0px; -} - -.pt-0\.5 { - padding-top: 0.125rem; -} - -.pt-1 { - padding-top: 0.25rem; -} - -.pt-10 { - padding-top: 2.5rem; -} - -.pt-2 { - padding-top: 0.5rem; -} - -.pt-4 { - padding-top: 1rem; -} - -.pt-5 { - padding-top: 1.25rem; -} - -.pt-8 { - padding-top: 2rem; -} - -.text-left { - text-align: left; -} - -.text-center { - text-align: center; -} - -.align-middle { - vertical-align: middle; -} - -.font-sans { - font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; -} - -.font-serif { - font-family: Georgia, Cambria, "Times New Roman", Times, serif; -} - -.text-2xl { - font-size: 1.5rem; -} - -.text-3xl { - font-size: 1.875rem; -} - -.text-4xl { - font-size: 2.25rem; -} - -.text-5xl { - font-size: 3rem; -} - -.text-6xl { - font-size: 4rem; -} - -.text-base { - font-size: 1rem; -} - -.text-lg { - font-size: 1.125rem; -} - -.text-sm { - font-size: 0.875rem; -} - -.text-xl { - font-size: 1.25rem; -} - -.text-xs { - font-size: 0.75rem; -} - -.font-bold { - font-weight: 700; -} - -.font-extralight { - font-weight: 200; -} - -.font-light { - font-weight: 300; -} - -.font-medium { - font-weight: 500; -} - -.font-normal { - font-weight: 400; -} - -.font-semibold { - font-weight: 600; -} - -.italic { - font-style: italic; -} - -.leading-6 { - line-height: 1.5rem; -} - -.tracking-wide { - letter-spacing: 0.025em; -} - -.text-black { - --tw-text-opacity: 1; - color: rgb(0 0 0 / var(--tw-text-opacity)); -} - -.text-blue-500 { - --tw-text-opacity: 1; - color: rgb(66 153 225 / var(--tw-text-opacity)); -} - -.text-blue-600 { - --tw-text-opacity: 1; - color: rgb(49 130 206 / var(--tw-text-opacity)); -} - -.text-blue-800 { - --tw-text-opacity: 1; - color: rgb(44 82 130 / var(--tw-text-opacity)); -} - -.text-blue-900 { - --tw-text-opacity: 1; - color: rgb(42 67 101 / var(--tw-text-opacity)); -} - -.text-gray-100 { - --tw-text-opacity: 1; - color: rgb(247 250 252 / var(--tw-text-opacity)); -} - -.text-gray-400 { - --tw-text-opacity: 1; - color: rgb(203 213 224 / var(--tw-text-opacity)); -} - -.text-gray-500 { - --tw-text-opacity: 1; - color: rgb(160 174 192 / var(--tw-text-opacity)); -} - -.text-gray-600 { - --tw-text-opacity: 1; - color: rgb(113 128 150 / var(--tw-text-opacity)); -} - -.text-gray-700 { - --tw-text-opacity: 1; - color: rgb(74 85 104 / var(--tw-text-opacity)); -} - -.text-gray-800 { - --tw-text-opacity: 1; - color: rgb(45 55 72 / var(--tw-text-opacity)); -} - -.text-gray-900 { - --tw-text-opacity: 1; - color: rgb(26 32 44 / var(--tw-text-opacity)); -} - -.text-green-500 { - --tw-text-opacity: 1; - color: rgb(72 187 120 / var(--tw-text-opacity)); -} - -.text-green-600 { - --tw-text-opacity: 1; - color: rgb(56 161 105 / var(--tw-text-opacity)); -} - -.text-green-700 { - --tw-text-opacity: 1; - color: rgb(47 133 90 / var(--tw-text-opacity)); -} - -.text-green-900 { - --tw-text-opacity: 1; - color: rgb(34 84 61 / var(--tw-text-opacity)); -} - -.text-orange-600 { - --tw-text-opacity: 1; - color: rgb(221 107 32 / var(--tw-text-opacity)); -} - -.text-pink-500 { - --tw-text-opacity: 1; - color: rgb(237 100 166 / var(--tw-text-opacity)); -} - -.text-red-500 { - --tw-text-opacity: 1; - color: rgb(245 101 101 / var(--tw-text-opacity)); -} - -.text-red-600 { - --tw-text-opacity: 1; - color: rgb(229 62 62 / var(--tw-text-opacity)); -} - -.text-red-700 { - --tw-text-opacity: 1; - color: rgb(197 48 48 / var(--tw-text-opacity)); -} - -.text-red-900 { - --tw-text-opacity: 1; - color: rgb(116 42 42 / var(--tw-text-opacity)); -} - -.text-sky-600 { - --tw-text-opacity: 1; - color: rgb(2 132 199 / var(--tw-text-opacity)); -} - -.text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.text-yellow-400 { - --tw-text-opacity: 1; - color: rgb(246 224 94 / var(--tw-text-opacity)); -} - -.text-yellow-500 { - --tw-text-opacity: 1; - color: rgb(236 201 75 / var(--tw-text-opacity)); -} - -.text-yellow-600 { - --tw-text-opacity: 1; - color: rgb(214 158 46 / var(--tw-text-opacity)); -} - -.text-yellow-900 { - --tw-text-opacity: 1; - color: rgb(116 66 16 / var(--tw-text-opacity)); -} - -.underline { - text-decoration-line: underline; -} - -.no-underline { - text-decoration-line: none; -} - -.underline-offset-2 { - text-underline-offset: 2px; -} - -.opacity-0 { - opacity: 0; -} - -.opacity-100 { - opacity: 1; -} - -.opacity-50 { - opacity: 0.5; -} - -.opacity-75 { - opacity: 0.75; -} - -.shadow { - --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-2xl { - --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); - --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-inner { - --tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-lg { - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-md { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-xl { - --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.outline-0 { - outline-width: 0px; -} - -.blur { - --tw-blur: blur(8px); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.drop-shadow-lg { - --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1)); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.filter { - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.transition { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.transition-opacity { - transition-property: opacity; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.duration-300 { - transition-duration: 300ms; -} - -.btn { - font-weight: 400; - line-height: 1.5rem; - letter-spacing: 0.025em; - font-family: 'Balsamiq Sans', sans-serif; - border-radius: 0.25rem; - border-width: 1px; - border-bottom-width: 4px; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.25rem; - display: inline-block; - --tw-border-opacity: 1; - border-color: rgb(43 108 176 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(66 153 225 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); - text-decoration-line: none; -} - -.btn:hover { - --tw-border-opacity: 1; - border-color: rgb(66 153 225 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(99 179 237 / var(--tw-bg-opacity)); -} - -.btn:hover:active { - --tw-border-opacity: 1; - border-color: rgb(43 108 176 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(43 108 176 / var(--tw-bg-opacity)); -} - -.menubar-item { - display: block; - cursor: pointer; - border-bottom-width: 4px; - letter-spacing: 0.025em; - /* Colors */ - --tw-border-opacity: 1; - border-color: rgb(247 250 252 / var(--tw-border-opacity)); -} - -.menubar-item:hover { - /* Colors */ - --tw-border-opacity: 1; - border-color: rgb(247 250 252 / var(--tw-border-opacity)); -} - -.menubar-item.active { - /* Colors */ - --tw-border-opacity: 1 !important; - border-color: rgb(49 130 206 / var(--tw-border-opacity)) !important; -} - -.menubar-text { - align-items: center; - padding: 0.25rem; - font-size: 1rem; - text-decoration-line: none; - font-family: 'Balsamiq Sans', sans-serif; -} - -@media (min-width: 1024px) { - .menubar-text { - font-size: 1.25rem; - } -} - -.menubar-text { - /* Colors */ - --tw-text-opacity: 1; - color: rgb(49 130 206 / var(--tw-text-opacity)); -} - -#output, #quiz_question_output_container { - font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace; -} - -.dropdown-menu { - position: absolute; - display: block; - width: -moz-max-content; - width: max-content; - overflow: hidden; - border-radius: 0.375rem; - padding: 1rem; - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -:is([dir="ltr"] .dropdown-menu) { - right: 0px; - margin-right: 0.25rem; -} - -:is([dir="rtl"] .dropdown-menu) { - left: 0px; - margin-left: 0.25rem; -} - -.dropdown-menu { - top: 40px; - cursor: auto; - /* Undo cursor-pointer we inherit from the menu */ -} - -.dropdown-blue { - border-width: 2px; - --tw-border-opacity: 1; - border-color: rgb(66 153 225 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(247 250 252 / var(--tw-bg-opacity)); -} - -.dropdown-green { - border-width: 2px; - --tw-border-opacity: 1; - border-color: rgb(72 187 120 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(247 250 252 / var(--tw-bg-opacity)); -} - -.dropdown-menu h2 { - margin-left: 1rem; - margin-right: 1rem; - margin-bottom: 0.5rem; - padding-bottom: 0.5rem; - text-align: center; - font-weight: 500; -} - -.dropdown-green h2 { - --tw-text-opacity: 1; - color: rgb(56 161 105 / var(--tw-text-opacity)); -} - -.dropdown-item { - display: block; - white-space: nowrap; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - --tw-text-opacity: 1; - color: rgb(45 55 72 / var(--tw-text-opacity)); - text-decoration-line: none; -} - -.dropdown-item:hover { - --tw-bg-opacity: 1; - background-color: rgb(49 130 206 / var(--tw-bg-opacity)); -} - -.dropdown-item { - width: 13rem; - cursor: pointer; - border-radius: 0.375rem; - font-weight: 500; - flex-grow: 0; -} - -.dropdown-item:hover { - --tw-bg-opacity: 1; - background-color: rgb(49 130 206 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.text-shadow { - text-shadow: 0 2px 4px rgba(0,0,0,0.10); -} - -.text-shadow-md { - text-shadow: 0 4px 8px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.08); -} - -.text-shadow-lg { - text-shadow: 0 15px 30px rgba(0,0,0,0.11), 0 5px 15px rgba(0,0,0,0.08); -} - -.text-shadow-none { - text-shadow: none; -} - -/* Lists */ - -ul { - list-style: disc outside none; -} - -ol { - list-style: decimal outside none; -} - -.text-display-copy ul, .text-display-copy ol, -.text-business-copy ul, .text-business-copy ol { - margin-left: 2.5rem; -} - -.text-adventure-copy ul, .text-adventure-copy ol { - margin-left: 2rem; -} - -.text-display-copy ul li + li, .text-display-copy ol li + li, -.text-business-copy ul li + li, .text-business-copy ol li + li { - margin-top: 0.5rem; -} - -.text-adventure-copy ul li + li, .text-adventure-copy ol li + li { - margin-top: 0.25rem; -} - -/* AUTH */ - -input:disabled { - --tw-bg-opacity: 1; - background-color: rgb(203 213 224 / var(--tw-bg-opacity)); -} - -input[type=checkbox], input[type=radio] { - height: 1.25rem; - width: 1.25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(74 85 104 / var(--tw-border-opacity)); -} - -input[type=radio] { - border-radius: 9999px; -} - -#signup input:required, #signup select:required, #profile input:required, #change_password input:required { - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(252 129 129 / var(--tw-border-opacity)); -} - -/* Make this !important to it over-writes the red required border when valid */ - -input:required:valid, select:required:valid { - --tw-border-opacity: 1 !important; - border-color: rgb(104 211 145 / var(--tw-border-opacity)) !important; -} - -input[type=checkbox]:checked, input[type=radio]:checked { - --tw-border-opacity: 1; - border-color: rgb(56 161 105 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(104 211 145 / var(--tw-bg-opacity)); -} - -input, select { - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(203 213 224 / var(--tw-border-opacity)); -} - -table.users thead { - font-weight: bold; -} - -table.users td { - padding: 10px; - border: solid 1px gray; -} - -/* Keep the class name the same to prevent complex restructuring -> the RTL version is actually left-hand-shadow */ - -/* https://stackoverflow.com/questions/17572619/how-to-create-a-inset-box-shadow-only-on-one-side */ - -body[dir='ltr'] .right-hand-shadow { - box-shadow: inset -7px 0 9px -7px rgba(0,0,0,0.4); -} - -body[dir='rtl'] .right-hand-shadow { - box-shadow: inset 7px 0 9px -7px rgba(0,0,0,0.4); -} - -.tab { - margin-top: 0.5rem; - cursor: pointer; - border-top-left-radius: 0.5rem; - border-top-right-radius: 0.5rem; - border-top-width: 8px; - --tw-border-opacity: 1; - border-color: rgb(226 232 240 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(247 250 252 / var(--tw-bg-opacity)); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 0.25rem; - padding-right: 0.25rem; - font-size: 0.875rem; - box-shadow: - /* bottom */ inset 0px -4px 4px -1px rgba(0,0,0,0.1); -} - -.teacher_tab { - --tw-border-opacity: 1; - border-color: rgb(154 230 180 / var(--tw-border-opacity)); -} - -.special_tab { - --tw-border-opacity: 1; - border-color: rgb(144 205 244 / var(--tw-border-opacity)); -} - -.command_tab { - --tw-border-opacity: 1; - border-color: rgb(253 178 197 / var(--tw-border-opacity)); -} - -.active-bluebar-btn { - --tw-bg-opacity: 1; - background-color: rgb(144 205 244 / var(--tw-bg-opacity)); - box-shadow: inset 0 2px 4px 0 rgb(0 0 10 / 0.3); -} - -/* TB: We shouldn't ever do this, all this dynamic handling can already be fixed with Tailwind! */ - -@media (min-width: 1024px) { - .tab { - padding-left: 0.5rem; - padding-right: 0.5rem; - } -} - -@media (min-width: 1280px) { - .tab { - padding-left: 1rem; - padding-right: 1rem; - } -} - -.tab + .tab { - box-shadow: - /* bottom */ inset 0px -4px 4px -1px rgba(0,0,0,0.1), - /* left */ inset 4px 0px 4px -1px rgba(0,0,0,0.1); -} - -.tab-selected { - margin-top: 0px; - border-top-left-radius: 0.5rem; - border-top-right-radius: 0.5rem; - border-top-width: 8px; - border-right-width: 1px; - border-left-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(237 100 166 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); - padding-top: 0.5rem; - font-weight: 400; - --tw-text-opacity: 1; - color: rgb(0 0 0 / var(--tw-text-opacity)); - box-shadow: none !important; -} - -/* EDITOR WARNINGS & ERRORS */ - -div#errorbox, div#warningbox { - position: relative; -} - -:is([dir="ltr"] p.close-dialog) { - right: 5px; -} - -:is([dir="rtl"] p.close-dialog) { - left: 5px; -} - -p.close-dialog { - font-weight: bold; - position: absolute; - top: 5px; - cursor: pointer; -} - -.editor-error { - position: absolute; - border-bottom-width: 2px; - border-top-width: 2px; - --tw-border-opacity: 1; - border-color: rgb(245 101 101 / var(--tw-border-opacity)); - background-color: rgb(66 153 225 / 0.7); - z-index: 10; - /* Show higher than the active line (which has z-index 2) */ -} - -/** - * Will be used to strikethrough a line without actual text, so we need to fake it - * with a horizontal line that's a bit offset from the top. - */ - -.disabled-line { - position: absolute; - border-top: solid 1px white; - margin-top: 0.6em; - border-radius: 0px !important; -} - -/** - * Will be used to indicate current line in debugger - */ - -.debugger-current-line { - position: absolute; - background: #2D6099; - z-index: 20; -} - -/* DOCS */ - -.expandable-docs-text h1 { - margin-top: 30px; - margin-bottom: 30px; -} - -/* QUIZ */ - -#quiz-iframe { - height: 72rem; - -moz-transform-origin: 0 0; - -o-transform-origin: 0 0; - -webkit-transform-origin: 0 0; -} - -/* Stats */ - -.stats-period-toggle.active { - color: black; - text-decoration: none; - cursor: default; - font-weight: normal; -} - -.stats-legend { - list-style-type: none; -} - -.stats-legend-item { - display: inline; - padding-right: 15px; - cursor: default; -} - -.stats-legend-color-box { - width: 45px; - height: 12px; - display:inline-block; - margin-right: 5px; -} - -/* Tab content - closed */ - -.accordion .accordion-tab input ~ .tab-content { - max-height: 0; - transition: max-height .35s; -} - -/* Accordion icon */ - -:is([dir="ltr"] .accordion .accordion-tab label)::before { - right: 0px; - float: right; -} - -:is([dir="rtl"] .accordion .accordion-tab label)::before { - left: 0px; - float: left; -} - -.accordion .accordion-tab label::before { - top: 0; - display: block; - width: 1.5em; - height: 1.5em; - line-height: 1.5; - font-size: 1.25rem; - font-weight: bolder; - text-align: center; - transition: all .35s; -} - -/* Tab content - open */ - -.accordion .accordion-tab input:checked ~ .tab-content { - max-height: 3000vh; -} - -/* Accordion icon formatting - closed */ - -:is([dir="ltr"] .accordion .accordion-tab input[type=checkbox] + label)::before { - right: 5px; -} - -:is([dir="rtl"] .accordion .accordion-tab input[type=checkbox] + label)::before { - left: 5px; -} - -.accordion .accordion-tab input[type=checkbox] + label::before { - content: ">"; - transform: rotate(90deg); -} - -/* Accordion icon formatting - open */ - -.accordion .accordion-tab input[type=checkbox]:checked + label::before { - transform: rotate(270deg); -} - -/* Programs */ - -.explore-program-box { - position: relative; - height: 18rem; - width: 16rem; - border-radius: 0.5rem; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(74 85 104 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(190 227 248 / var(--tw-bg-opacity)); -} - -.explore-program-box-title { - margin-top: -2rem; - width: 18rem; - padding-top: 2.5rem; - text-align: center; - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -:is([dir="ltr"] .explore-program-box-title) { - margin-left: -0.5rem; - --tw-rotate: 6deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - padding-left: 3rem; -} - -:is([dir="rtl"] .explore-program-box-title) { - margin-right: -0.5rem; - --tw-rotate: -6deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - padding-right: 3rem; -} - -/* Profile page */ - -.section-header { - cursor: pointer; - border-radius: 0.5rem; - --tw-bg-opacity: 1; - background-color: rgb(190 227 248 / var(--tw-bg-opacity)); - padding-left: 2rem; - padding-right: 2rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - font-size: 1.875rem; -} - -.profile-section-body-header { - margin-bottom: 1rem; - display: inline-block; - width: 100%; - border-bottom-width: 1px; - padding-bottom: 0.5rem; -} - -.profile-section-body { - margin-left: auto; - margin-right: auto; - display: none; - width: 100%; - border-radius: 0.25rem; - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); - padding-left: 2rem; - padding-right: 2rem; - padding-top: 1rem; - padding-bottom: 1rem; - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -@media (min-width: 1024px) { - .profile-section-body { - width: 75%; - } -} - -.personal-input { - display: block; - width: 75%; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - border-radius: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.25rem; - padding-bottom: 0.25rem; - --tw-text-opacity: 1; - color: rgb(74 85 104 / var(--tw-text-opacity)); -} - -@media (min-width: 1024px) { - .personal-input { - width: 50%; - } -} - -/* Signup page */ - -.signup-container { - margin-left: auto; - margin-right: auto; - display: flex; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 2rem; - padding-right: 2rem; -} - -.signup-label { - display: inline-block; - width: 33.333333%; -} - -@media (min-width: 768px) { - .signup-label { - width: 12rem; - } -} - -.signup-input { - display: inline-block; - width: 66.666667%; - border-radius: 0.5rem; - --tw-border-opacity: 1; - border-color: rgb(203 213 224 / var(--tw-border-opacity)); - padding-left: 0.5rem; - padding-right: 0.5rem; - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} - -@media (min-width: 768px) { - .signup-input { - width: 20rem; - } -} - -@media (min-width: 1024px) { - .signup-input { - width: 24rem; - } -} - -/* Developers mode toggle */ - -:is([dir="ltr"] .toggle-circle) { - left: 0px; -} - -:is([dir="rtl"] .toggle-circle) { - right: 0px; -} - -.toggle-circle { - transition: all 0.2s ease-in-out; -} - -body[dir='ltr'] input:checked ~ .toggle-circle { - transform: translateX(100%); - --tw-bg-opacity: 1; - background-color: rgb(104 211 145 / var(--tw-bg-opacity)); -} - -body[dir='rtl'] input:checked ~ .toggle-circle { - transform: translateX(-100%); - --tw-bg-opacity: 1; - background-color: rgb(104 211 145 / var(--tw-bg-opacity)); -} - -/* For the keyword toggle we have to move 200% instead of 100%, implement as edge case */ - -body[dir='ltr'] #keyword_toggle_container input:checked ~ .toggle-circle { - /* transform: translateX(200%); */ -} - -body[dir='rtl'] #keyword_toggle_container input:checked ~ .toggle-circle { - /* transform: translateX(-200%); */ -} - -input:checked ~ .toggle-path { - --tw-bg-opacity: 1; - background-color: rgb(113 128 150 / var(--tw-bg-opacity)); -} - -.focused-option { - border-width: 8px; - border-style: double; -} - -.menubar-item.focused-option { - /* Colors */ - --tw-border-opacity: 1 !important; - border-color: rgb(49 130 206 / var(--tw-border-opacity)) !important; -} - -.stats-period-toggle.focused-option { - color: black; - text-decoration: none; - cursor: default; - font-weight: normal; -} - -.focused-option { - --tw-scale-x: 1.1; - --tw-scale-y: 1.1; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -/* Not really nice, but we have to use the !important attribute to overwrite the current style */ - -.incorrect-option { - background-color: rgba(234, 55, 55, 0.6) !important; - border: 5px #c21919 dashed!important; -} - -/* Also not really nice, but with the relic quiz code still an improvement */ - -.quiz-icons { - position: relative; - height: 3.5rem; - width: 3.5rem; - top: -40px; - left: -10px; -} - -.animate-keys { - position: absolute; - bottom: 0.25rem; - right: 0.5rem; - /* Would be nice to animate this with Tailwind as well, but should be fine for now */ - animation-name: animate-keys; - animation-duration: 1.5s; - animation-timing-function: ease-in-out; - -webkit-animation-timing-function: ease-in-out; -} - -/* We could also add this keyframe to tailwind.config.js, but as it is the only one: leave here for now */ - -@keyframes animate-keys { - 0% { - bottom:15px; - font-size: 1em; - opacity: 1 - } - - 100% { - bottom:100%; - font-size: 4em; - opacity: 0 - } -} - -.drop-adventures-hint { - --tw-border-opacity: 1; - border-color: rgb(144 205 244 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(235 248 255 / var(--tw-bg-opacity)); -} - -.drop-adventures-active { - --tw-border-opacity: 1; - border-color: rgb(250 240 137 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(255 255 240 / var(--tw-bg-opacity)); -} - -.adventures-tab { - width: auto; - flex-direction: row; - overflow-x: auto; - overflow-y: hidden; -} - -.adventures-tab[style*='display: block'] { - display: flex !important; -} - -.profile-nametag__stats { - display: flex; - width: 100%; - flex-direction: row; - align-items: stretch; - justify-content: center; - text-align: center; -} - -.switch { - position: relative; - display: inline-block; - width: 30px; - height: 17px; -} - -.switch input { - opacity: 0; - width: 0; - height: 0; -} - -.slider { - --tw-bg-opacity: 1; - background-color: rgb(203 213 224 / var(--tw-bg-opacity)); - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - transition: .4s; -} - -.slider:before { - position: absolute; - content: ""; - height: 13px; - width: 13px; - left: 2px; - bottom: 2px; - background-color: white; - transition: .4s; -} - -input:checked + .slider { - --tw-bg-opacity: 1; - background-color: rgb(72 187 120 / var(--tw-bg-opacity)); -} - -input:checked + .slider:before { - transform: translateX(13px); -} - -/* Rounded sliders */ - -.slider.round { - border-radius: 34px; -} - -.slider.round:before { - border-radius: 50%; -} - -input:disabled::-moz-placeholder { - --tw-text-opacity: 1; - color: rgb(74 85 104 / var(--tw-text-opacity)); -} - -input:disabled::placeholder { - --tw-text-opacity: 1; - color: rgb(74 85 104 / var(--tw-text-opacity)); -} - -.htmx-indicator.custom-indicator{ - opacity:0; - transition: opacity 0ms ease-in; -} - -.htmx-request .custom-indicator{ - opacity:1; -} - -.htmx-request.custom-indicator{ - opacity:1; -} - -div[class^="ace_incorrect_hedy_code"] { - border-bottom: 2px dashed red; - position: absolute; - cursor: pointer !important; - pointer-events: auto; -} - -.student_adventure_checkbox[disabled] { - position: relative !important; - border-radius: 0.25rem !important; - --tw-border-opacity: 1 !important; - border-color: rgb(160 174 192 / var(--tw-border-opacity)) !important; - --tw-bg-opacity: 1 !important; - background-color: rgb(237 242 247 / var(--tw-bg-opacity)) !important; -} - -.student_adventure_checkbox { - position: relative !important; - border-radius: 0.25rem !important; - --tw-border-opacity: 1 !important; - border-color: rgb(160 174 192 / var(--tw-border-opacity)) !important; - --tw-bg-opacity: 1 !important; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)) !important; -} - -.student_adventure_checkbox:checked { - position: relative !important; - border-radius: 0.25rem !important; - --tw-border-opacity: 1 !important; - border-color: rgb(160 174 192 / var(--tw-border-opacity)) !important; - --tw-bg-opacity: 1 !important; - background-color: rgb(154 230 180 / var(--tw-bg-opacity)) !important; -} - -.hover\:rounded-full:hover { - border-radius: 9999px; -} - -.hover\:border-blue-300:hover { - --tw-border-opacity: 1; - border-color: rgb(144 205 244 / var(--tw-border-opacity)); -} - -.hover\:border-blue-600:hover { - --tw-border-opacity: 1; - border-color: rgb(49 130 206 / var(--tw-border-opacity)); -} - -.hover\:border-green-400:hover { - --tw-border-opacity: 1; - border-color: rgb(104 211 145 / var(--tw-border-opacity)); -} - -.hover\:bg-black\/75:hover { - background-color: rgb(0 0 0 / 0.75); -} - -.hover\:bg-blue-100:hover { - --tw-bg-opacity: 1; - background-color: rgb(235 248 255 / var(--tw-bg-opacity)); -} - -.hover\:bg-blue-300:hover { - --tw-bg-opacity: 1; - background-color: rgb(144 205 244 / var(--tw-bg-opacity)); -} - -.hover\:bg-blue-400:hover { - --tw-bg-opacity: 1; - background-color: rgb(99 179 237 / var(--tw-bg-opacity)); -} - -.hover\:bg-blue-600:hover { - --tw-bg-opacity: 1; - background-color: rgb(49 130 206 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-300:hover { - --tw-bg-opacity: 1; - background-color: rgb(226 232 240 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-400:hover { - --tw-bg-opacity: 1; - background-color: rgb(203 213 224 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-400\/50:hover { - background-color: rgb(203 213 224 / 0.5); -} - -.hover\:bg-green-300:hover { - --tw-bg-opacity: 1; - background-color: rgb(154 230 180 / var(--tw-bg-opacity)); -} - -.hover\:bg-green-400:hover { - --tw-bg-opacity: 1; - background-color: rgb(104 211 145 / var(--tw-bg-opacity)); -} - -.hover\:text-red-400:hover { - --tw-text-opacity: 1; - color: rgb(252 129 129 / var(--tw-text-opacity)); -} - -.hover\:text-white:hover { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.hover\:underline:hover { - text-decoration-line: underline; -} - -.hover\:opacity-100:hover { - opacity: 1; -} - -.focus\:bg-blue-100:focus { - --tw-bg-opacity: 1; - background-color: rgb(235 248 255 / var(--tw-bg-opacity)); -} - -.group:hover .group-hover\:opacity-100 { - opacity: 1; -} - -:is([dir="ltr"] .ltr\:-left-1) { - left: -0.25rem; -} - -:is([dir="ltr"] .ltr\:-left-2) { - left: -0.5rem; -} - -:is([dir="ltr"] .ltr\:-right-1) { - right: -0.25rem; -} - -:is([dir="ltr"] .ltr\:right-0) { - right: 0px; -} - -:is([dir="ltr"] .ltr\:clear-right) { - clear: right; -} - -:is([dir="ltr"] .ltr\:ml-0) { - margin-left: 0px; -} - -:is([dir="ltr"] .ltr\:ml-1) { - margin-left: 0.25rem; -} - -:is([dir="ltr"] .ltr\:ml-2) { - margin-left: 0.5rem; -} - -:is([dir="ltr"] .ltr\:ml-3) { - margin-left: 0.75rem; -} - -:is([dir="ltr"] .ltr\:ml-4) { - margin-left: 1rem; -} - -:is([dir="ltr"] .ltr\:ml-8) { - margin-left: 2rem; -} - -:is([dir="ltr"] .ltr\:ml-auto) { - margin-left: auto; -} - -:is([dir="ltr"] .ltr\:mr-1) { - margin-right: 0.25rem; -} - -:is([dir="ltr"] .ltr\:mr-2) { - margin-right: 0.5rem; -} - -:is([dir="ltr"] .ltr\:mr-24) { - margin-right: 6rem; -} - -:is([dir="ltr"] .ltr\:mr-3) { - margin-right: 0.75rem; -} - -:is([dir="ltr"] .ltr\:mr-4) { - margin-right: 1rem; -} - -:is([dir="ltr"] .ltr\:mr-5) { - margin-right: 1.25rem; -} - -:is([dir="ltr"] .ltr\:mr-auto) { - margin-right: auto; -} - -:is([dir="ltr"] .ltr\:hidden) { - display: none; -} - -:is([dir="ltr"] .ltr\:divide-x) > :not([hidden]) ~ :not([hidden]) { - --tw-divide-x-reverse: 0; - border-right-width: calc(1px * var(--tw-divide-x-reverse)); - border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse))); -} - -:is([dir="ltr"] .ltr\:pl-2) { - padding-left: 0.5rem; -} - -:is([dir="ltr"] .ltr\:pl-4) { - padding-left: 1rem; -} - -:is([dir="ltr"] .ltr\:pl-8) { - padding-left: 2rem; -} - -:is([dir="ltr"] .ltr\:pr-4) { - padding-right: 1rem; -} - -:is([dir="ltr"] .ltr\:pr-8) { - padding-right: 2rem; -} - -:is([dir="ltr"] .ltr\:text-left) { - text-align: left; -} - -:is([dir="ltr"] .ltr\:text-right) { - text-align: right; -} - -:is([dir="rtl"] .rtl\:-left-1) { - left: -0.25rem; -} - -:is([dir="rtl"] .rtl\:-right-1) { - right: -0.25rem; -} - -:is([dir="rtl"] .rtl\:-right-2) { - right: -0.5rem; -} - -:is([dir="rtl"] .rtl\:left-0) { - left: 0px; -} - -:is([dir="rtl"] .rtl\:left-2) { - left: 0.5rem; -} - -:is([dir="rtl"] .rtl\:clear-left) { - clear: left; -} - -:is([dir="rtl"] .rtl\:ml-1) { - margin-left: 0.25rem; -} - -:is([dir="rtl"] .rtl\:ml-2) { - margin-left: 0.5rem; -} - -:is([dir="rtl"] .rtl\:ml-24) { - margin-left: 6rem; -} - -:is([dir="rtl"] .rtl\:ml-3) { - margin-left: 0.75rem; -} - -:is([dir="rtl"] .rtl\:ml-4) { - margin-left: 1rem; -} - -:is([dir="rtl"] .rtl\:ml-5) { - margin-left: 1.25rem; -} - -:is([dir="rtl"] .rtl\:ml-auto) { - margin-left: auto; -} - -:is([dir="rtl"] .rtl\:mr-0) { - margin-right: 0px; -} - -:is([dir="rtl"] .rtl\:mr-1) { - margin-right: 0.25rem; -} - -:is([dir="rtl"] .rtl\:mr-2) { - margin-right: 0.5rem; -} - -:is([dir="rtl"] .rtl\:mr-3) { - margin-right: 0.75rem; -} - -:is([dir="rtl"] .rtl\:mr-4) { - margin-right: 1rem; -} - -:is([dir="rtl"] .rtl\:mr-8) { - margin-right: 2rem; -} - -:is([dir="rtl"] .rtl\:mr-auto) { - margin-right: auto; -} - -:is([dir="rtl"] .rtl\:hidden) { - display: none; -} - -:is([dir="rtl"] .rtl\:divide-x-reverse) > :not([hidden]) ~ :not([hidden]) { - --tw-divide-x-reverse: 1; -} - -:is([dir="rtl"] .rtl\:pl-4) { - padding-left: 1rem; -} - -:is([dir="rtl"] .rtl\:pl-8) { - padding-left: 2rem; -} - -:is([dir="rtl"] .rtl\:pr-2) { - padding-right: 0.5rem; -} - -:is([dir="rtl"] .rtl\:pr-4) { - padding-right: 1rem; -} - -:is([dir="rtl"] .rtl\:pr-8) { - padding-right: 2rem; -} - -:is([dir="rtl"] .rtl\:text-left) { - text-align: left; -} - -:is([dir="rtl"] .rtl\:text-right) { - text-align: right; -} - -@media (min-width: 640px) { - .sm\:block { - display: block; - } - - .sm\:inline { - display: inline; - } - - .sm\:w-5\/12 { - width: 41.666667%; - } -} - -@media (min-width: 768px) { - .md\:order-4 { - order: 4; - } - - .md\:mx-16 { - margin-left: 4rem; - margin-right: 4rem; - } - - .md\:block { - display: block; - } - - .md\:flex { - display: flex; - } - - .md\:hidden { - display: none; - } - - .md\:h-64 { - height: 16rem; - } - - .md\:w-2\/5 { - width: 40%; - } - - .md\:w-3\/12 { - width: 25%; - } - - .md\:w-3\/5 { - width: 60%; - } - - .md\:grid-flow-row-dense { - grid-auto-flow: row dense; - } - - .md\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .md\:flex-row { - flex-direction: row; - } - - .md\:items-center { - align-items: center; - } - - .md\:justify-center { - justify-content: center; - } - - .md\:gap-8 { - gap: 2rem; - } - - .md\:px-16 { - padding-left: 4rem; - padding-right: 4rem; - } - - .md\:px-4 { - padding-left: 1rem; - padding-right: 1rem; - } - - .md\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } - - .md\:py-16 { - padding-top: 4rem; - padding-bottom: 4rem; - } -} - -@media (min-width: 1024px) { - .lg\:mx-16 { - margin-left: 4rem; - margin-right: 4rem; - } - - .lg\:inline-block { - display: inline-block; - } - - .lg\:flex { - display: flex; - } - - .lg\:h-10 { - height: 2.5rem; - } - - .lg\:h-16 { - height: 4rem; - } - - .lg\:w-1\/12 { - width: 8.333333%; - } - - .lg\:w-1\/2 { - width: 50%; - } - - .lg\:w-12 { - width: 3rem; - } - - .lg\:w-3\/4 { - width: 75%; - } - - .lg\:flex-row { - flex-direction: row; - } - - .lg\:flex-nowrap { - flex-wrap: nowrap; - } - - .lg\:px-0 { - padding-left: 0px; - padding-right: 0px; - } - - .lg\:px-4 { - padding-left: 1rem; - padding-right: 1rem; - } - - .lg\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } -} - -@media (min-width: 1280px) { - .xl\:gap-x-6 { - -moz-column-gap: 1.5rem; - column-gap: 1.5rem; - } -} +*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#edf2f7}::after,::before{--tw-content:''}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#cbd5e0}input::placeholder,textarea::placeholder{opacity:1;color:#cbd5e0}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::after,::before{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(66 153 225 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }html{font-weight:300;overflow-x:hidden;margin-right:calc(-1 * (100vw - 100%))}.font-slab{font-family:'Balsamiq Sans',sans-serif}.dot{height:25px;width:25px;border-radius:50%;display:inline-block}h1{font-size:2.25rem;font-weight:200}h2{font-size:1.5rem;font-weight:700}h3{font-size:1.5rem;font-weight:700}h4{font-size:1rem;font-weight:700}*+ol,*+p,*+pre,*+ul{margin-top:1rem}a{font-weight:600;--tw-text-opacity:1;color:rgb(99 179 237 / var(--tw-text-opacity));text-decoration:underline}strong{font-weight:700}.tiny-btn{border-bottom-width:2px;padding-left:.5rem;padding-right:.5rem;padding-top:.25rem;font-size:.875rem}.common-page-container{margin-left:auto;margin-right:auto;width:100%;max-width:1536px;padding:2rem}.copy-container{margin-left:auto;margin-right:auto;max-width:1024px}.copy-container-wide{margin-left:auto;margin-right:auto;max-width:1280px}.text-business-copy,.text-display-copy{line-height:1.625}.text-display-copy h2{text-align:center;font-size:2.25rem;--tw-text-opacity:1;color:rgb(213 63 140 / var(--tw-text-opacity))}.text-display-copy h3{font-size:2.25rem;--tw-text-opacity:1;color:rgb(213 63 140 / var(--tw-text-opacity))}.text-display-copy .columns h3{font-size:1.5rem}.text-business-copy h3:first-child{margin-top:0}.text-business-copy *+h3{margin-top:2rem}.btn-shape{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;display:inline-block}.green-btn{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;display:inline-block;--tw-border-opacity:1;border-color:rgb(47 133 90 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(72 187 120 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.green-btn:disabled,.green-btn[disabled]{--tw-border-opacity:1;border-color:rgb(74 85 104 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(160 174 192 / var(--tw-bg-opacity))}.white-btn{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;display:inline-block;--tw-border-opacity:1;border-color:rgb(99 179 237 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(66 153 225 / var(--tw-text-opacity))}.stripe-colored{border-bottom-width:4px;--tw-border-opacity:1;border-color:rgb(236 201 75 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(246 224 94 / var(--tw-bg-opacity))}.stripe-white{border-bottom-width:4px}.stripe-colored a,.stripe-colored h2{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.stripe-colored .column-pane a{--tw-text-opacity:1;color:rgb(43 108 176 / var(--tw-text-opacity))}.stripe-colored .column-pane{border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-shadow:0 4px 6px -1px rgb(0 0 0 / 0.1),0 2px 4px -2px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.heading-underline{margin-left:auto;margin-right:auto;margin-top:2rem;margin-bottom:2rem;height:.25rem;width:9rem;--tw-bg-opacity:1;background-color:rgb(213 63 140 / var(--tw-bg-opacity))}.stripe-colored .heading-underline{--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.text-links-plain a{color:inherit;text-decoration:none;font-weight:inherit}.tooltip{position:relative;display:inline-block}.tooltip .tooltiptext{visibility:hidden;position:absolute;align-items:center;--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(229 62 62 / var(--tw-text-opacity));width:130;bottom:150%;left:50%;margin-left:-80px}.tooltip:hover .tooltiptext{visibility:visible}.tooltip .tooltiptext::after{position:absolute;content:" ";top:100%;left:50%;margin-left:-10px;border-width:10px;border-style:solid;border-color:#fff transparent transparent transparent}.green-btn:hover:enabled,a.green-btn:hover{--tw-border-opacity:1;border-color:rgb(72 187 120 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(104 211 145 / var(--tw-bg-opacity))}.green-btn:hover:enabled:active,a.green-btn:hover:active{--tw-border-opacity:1;border-color:rgb(47 133 90 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(47 133 90 / var(--tw-bg-opacity))}.red-btn{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;display:inline-block;--tw-border-opacity:1;border-color:rgb(197 48 48 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(245 101 101 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.red-btn:hover{--tw-border-opacity:1;border-color:rgb(245 101 101 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(252 129 129 / var(--tw-bg-opacity))}.red-btn:hover:active{--tw-border-opacity:1;border-color:rgb(197 48 48 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(197 48 48 / var(--tw-bg-opacity))}.yellow-btn{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;display:inline-block;--tw-border-opacity:1;border-color:rgb(183 121 31 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(236 201 75 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.yellow-btn:hover{--tw-border-opacity:1;border-color:rgb(236 201 75 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(246 224 94 / var(--tw-bg-opacity))}.yellow-btn:hover:active{--tw-border-opacity:1;border-color:rgb(183 121 31 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(183 121 31 / var(--tw-bg-opacity))}.pink-btn{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;display:inline-block;--tw-border-opacity:1;border-color:rgb(237 100 166 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(246 135 179 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.pink-btn:hover{--tw-border-opacity:1;border-color:rgb(246 135 179 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(251 182 206 / var(--tw-bg-opacity))}.pink-btn:hover:active{--tw-border-opacity:1;border-color:rgb(237 100 166 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(184 50 128 / var(--tw-bg-opacity))}.blue-btn{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;display:inline-block;--tw-border-opacity:1;border-color:rgb(43 108 176 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(66 153 225 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.blue-btn:hover{--tw-border-opacity:1;border-color:rgb(66 153 225 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(99 179 237 / var(--tw-bg-opacity))}.blue-btn:hover:active{--tw-border-opacity:1;border-color:rgb(43 108 176 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(43 108 176 / var(--tw-bg-opacity))}.gray-btn{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;display:inline-block;--tw-border-opacity:1;border-color:rgb(74 85 104 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(160 174 192 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.gray-btn:hover{--tw-border-opacity:1;border-color:rgb(160 174 192 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(203 213 224 / var(--tw-bg-opacity))}.gray-btn:hover:active{--tw-border-opacity:1;border-color:rgb(74 85 104 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(74 85 104 / var(--tw-bg-opacity))}.markdown{font-size:1.25rem;line-height:1.5;--tw-text-opacity:1;color:rgb(45 55 72 / var(--tw-text-opacity))}.markdown li+li,.markdown li>p+p{margin-top:.5rem;margin-bottom:.5rem}.markdown strong{font-weight:700}.markdown *+h1{margin-bottom:.5rem;margin-top:2.5rem;line-height:1.25}h2{font-weight:500;--tw-text-opacity:1;color:rgb(66 153 225 / var(--tw-text-opacity));font-family:'Balsamiq Sans',sans-serif;margin-bottom:.5rem;margin-top:2.5rem;font-size:1.5rem;line-height:1.25}h2:first-child{margin-top:0}h3{--tw-text-opacity:1;color:rgb(43 108 176 / var(--tw-text-opacity));font-family:'Balsamiq Sans',sans-serif;margin-top:1rem;margin-bottom:.25rem;font-size:1.25rem;line-height:1.25}h4{margin-top:1rem;margin-bottom:.5rem}.markdown code{padding-top:.25rem;padding-bottom:.25rem;padding-left:.25rem;padding-right:.25rem;font-size:1rem}pre code{margin-top:.5rem;margin-bottom:.5rem;display:block;border-radius:.25rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(226 232 240 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(237 242 247 / var(--tw-bg-opacity));padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;padding-right:1rem;font-size:1rem;--tw-text-opacity:1;color:rgb(229 62 62 / var(--tw-text-opacity))}pre{white-space:pre-wrap}.ace-container{background-color:#272822;border-radius:.25rem;padding:.5rem}pre,pre code{font-size:100%;color:#fff}code{display:inline;border-radius:.25rem;padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;padding-right:.5rem;font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-weight:400;background:#272822!important;color:#ff6188;font-size:90%}.markdown blockquote{border-left-width:4px;--tw-border-opacity:1;border-color:rgb(226 232 240 / var(--tw-border-opacity));font-style:italic}[dir=ltr] .markdown blockquote{padding-left:1rem}[dir=rtl] .markdown blockquote{padding-right:1rem}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.-top-1{top:-.25rem}.top-0\.5{top:.125rem}.right-0\.5{right:.125rem}.top-0{top:0}.right-0{right:0}.top-2{top:.5rem}.right-2{right:.5rem}.left-0{left:0}.left-1\/2{left:50%}.top-16{top:4rem}.bottom-0{bottom:0}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-30{z-index:30}.z-40{z-index:40}.order-2{order:2}.order-1{order:1}.order-3{order:3}.order-5{order:5}.col-span-2{grid-column:span 2/span 2}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.float-right{float:right}.m-auto{margin:auto}.m-2{margin:.5rem}.m-4{margin:1rem}.m-1{margin:.25rem}.m-8{margin:2rem}.mx-0{margin-left:0;margin-right:0}.my-4{margin-top:1rem;margin-bottom:1rem}.my-0{margin-top:0;margin-bottom:0}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-16{margin-left:4rem;margin-right:4rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-auto{margin-top:auto;margin-bottom:auto}.my-8{margin-top:2rem;margin-bottom:2rem}.my-16{margin-top:4rem;margin-bottom:4rem}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-4{margin-left:1rem}.mt-4{margin-top:1rem}.ml-auto{margin-left:auto}.ml-14{margin-left:3.5rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.mt-0{margin-top:0}.mb-2{margin-bottom:.5rem}.mb-8{margin-bottom:2rem}.mt-10{margin-top:2.5rem}.mb-0{margin-bottom:0}.mr-4{margin-right:1rem}.mt-3{margin-top:.75rem}.mt-8{margin-top:2rem}.mb-6{margin-bottom:1.5rem}.-mt-8{margin-top:-2rem}.mt-auto{margin-top:auto}.mt-1{margin-top:.25rem}.-ml-32{margin-left:-8rem}.mb-10{margin-bottom:2.5rem}.-mb-px{margin-bottom:-1px}.mr-1{margin-right:.25rem}.ml-1{margin-left:.25rem}.-mr-6{margin-right:-1.5rem}.mt-0\.5{margin-top:.125rem}.mr-5{margin-right:1.25rem}.ml-6{margin-left:1.5rem}.mt-5{margin-top:1.25rem}.ml-0{margin-left:0}.-mt-2{margin-top:-.5rem}.mt-24{margin-top:6rem}.mb-1{margin-bottom:.25rem}.mt-28{margin-top:7rem}.mr-8{margin-right:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[2\/3\]{aspect-ratio:2/3}.h-40{height:10rem}.h-full{height:100%}.h-16{height:4rem}.h-10{height:2.5rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-4{height:1rem}.h-96{height:24rem}.h-12{height:3rem}.h-32{height:8rem}.h-64{height:16rem}.h-min{height:-moz-min-content;height:min-content}.h-14{height:3.5rem}.h-80{height:20rem}.h-28{height:7rem}.h-screen{height:100vh}.h-auto{height:auto}.h-24{height:6rem}.h-2{height:.5rem}.max-h-56{max-height:14rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-\[3\.5rem\]{min-height:3.5rem}.w-40{width:10rem}.w-3\/4{width:75%}.w-full{width:100%}.w-6{width:1.5rem}.w-1\/2{width:50%}.w-8{width:2rem}.w-10{width:2.5rem}.w-64{width:16rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-1\/12{width:8.333333%}.w-auto{width:auto}.w-2\/3{width:66.666667%}.w-1\/3{width:33.333333%}.w-4\/5{width:80%}.w-12{width:3rem}.w-14{width:3.5rem}.w-4{width:1rem}.w-72{width:18rem}.w-max{width:-moz-max-content;width:max-content}.w-32{width:8rem}.w-24{width:6rem}.w-px{width:1px}.w-80{width:20rem}.w-10\/12{width:83.333333%}.w-2\/12{width:16.666667%}.w-min{width:-moz-min-content;width:min-content}.w-screen{width:100vw}.w-96{width:24rem}.w-2{width:.5rem}.w-56{width:14rem}.w-16{width:4rem}.min-w-\[100px\]{min-width:100px}.min-w-full{min-width:100%}.min-w-\[200px\]{min-width:200px}.min-w-min{min-width:-moz-min-content;min-width:min-content}.max-w-screen-xl{max-width:1280px}.max-w-screen-2xl{max-width:1536px}.max-w-lg{max-width:32rem}.max-w-screen-md{max-width:768px}.max-w-md{max-width:28rem}.max-w-3xl{max-width:48rem}.max-w-prose{max-width:65ch}.max-w-xl{max-width:36rem}.max-w-screen-lg{max-width:1024px}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-initial{flex:0 1 auto}.flex-grow{flex-grow:1}.basis-2\/3{flex-basis:66.666667%}.basis-1\/3{flex-basis:33.333333%}.table-auto{table-layout:auto}.border-separate{border-collapse:separate}.translate-y-8{--tw-translate-y:2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-6{--tw-translate-y:1.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-8{--tw-translate-y:-2rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-inside{list-style-position:inside}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-4{gap:1rem}.gap-2{gap:.5rem}.gap-8{gap:2rem}.gap-16{gap:4rem}.gap-6{gap:1.5rem}.gap-1{gap:.25rem}.gap-x-2{-moz-column-gap:0.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-12{-moz-column-gap:3rem;column-gap:3rem}.gap-y-16{row-gap:4rem}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.divide-blue-400>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(99 179 237 / var(--tw-divide-opacity))}.divide-blue-300>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(144 205 244 / var(--tw-divide-opacity))}.place-self-center{place-self:center}.self-end{align-self:flex-end}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded-lg{border-radius:.5rem}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border-2{border-width:2px}.border{border-width:1px}.border-0{border-width:0}.border-4{border-width:4px}.border-8{border-width:8px}.border-t-4{border-top-width:4px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-b-8{border-bottom-width:8px}.border-b-2{border-bottom-width:2px}.border-b-4{border-bottom-width:4px}.border-l{border-left-width:1px}.border-t-2{border-top-width:2px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-red-500{--tw-border-opacity:1;border-color:rgb(245 101 101 / var(--tw-border-opacity))}.border-orange-400{--tw-border-opacity:1;border-color:rgb(246 173 85 / var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(160 174 192 / var(--tw-border-opacity))}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(237 242 247 / var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(203 213 224 / var(--tw-border-opacity))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(236 201 75 / var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgb(72 187 120 / var(--tw-border-opacity))}.border-teal-500{--tw-border-opacity:1;border-color:rgb(56 178 172 / var(--tw-border-opacity))}.border-green-400{--tw-border-opacity:1;border-color:rgb(104 211 145 / var(--tw-border-opacity))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(49 130 206 / var(--tw-border-opacity))}.border-green-300{--tw-border-opacity:1;border-color:rgb(154 230 180 / var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(66 153 225 / var(--tw-border-opacity))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(99 179 237 / var(--tw-border-opacity))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(144 205 244 / var(--tw-border-opacity))}.border-green-600{--tw-border-opacity:1;border-color:rgb(56 161 105 / var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(246 224 94 / var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(113 128 150 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-yellow-600{--tw-border-opacity:1;border-color:rgb(214 158 46 / var(--tw-border-opacity))}.border-purple-600{--tw-border-opacity:1;border-color:rgb(128 90 213 / var(--tw-border-opacity))}.border-pink-600{--tw-border-opacity:1;border-color:rgb(213 63 140 / var(--tw-border-opacity))}.border-orange-600{--tw-border-opacity:1;border-color:rgb(221 107 32 / var(--tw-border-opacity))}.border-red-600{--tw-border-opacity:1;border-color:rgb(229 62 62 / var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(252 129 129 / var(--tw-border-opacity))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(190 227 248 / var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(160 174 192 / var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(255 245 245 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(66 153 225 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(237 242 247 / var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(203 213 224 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-green-300{--tw-bg-opacity:1;background-color:rgb(154 230 180 / var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(255 255 240 / var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(240 255 244 / var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(26 32 44 / var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(144 205 244 / var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-red-200\/50{background-color:rgb(254 215 215 / .5)}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(49 130 206 / var(--tw-bg-opacity))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(246 224 94 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(247 250 252 / var(--tw-bg-opacity))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(99 179 237 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(56 161 105 / var(--tw-bg-opacity))}.bg-pink-800{--tw-bg-opacity:1;background-color:rgb(151 38 109 / var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(235 248 255 / var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(45 55 72 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(72 187 120 / var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(236 201 75 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 101 101 / var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(102 126 234 / var(--tw-bg-opacity))}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(237 100 166 / var(--tw-bg-opacity))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 252 191 / var(--tw-bg-opacity))}.bg-green-200{--tw-bg-opacity:1;background-color:rgb(198 246 213 / var(--tw-bg-opacity))}.bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(250 240 137 / var(--tw-bg-opacity))}.bg-purple-300{--tw-bg-opacity:1;background-color:rgb(214 188 250 / var(--tw-bg-opacity))}.bg-pink-300{--tw-bg-opacity:1;background-color:rgb(251 182 206 / var(--tw-bg-opacity))}.bg-orange-300{--tw-bg-opacity:1;background-color:rgb(251 211 141 / var(--tw-bg-opacity))}.fill-current{fill:currentColor}.fill-green-800{fill:#276749}.fill-yellow-800{fill:#975a16}.fill-blue-800{fill:#2c5282}.fill-purple-800{fill:#553c9a}.fill-pink-800{fill:#97266d}.fill-orange-800{fill:#9c4221}.p-2{padding:.5rem}.p-5{padding:1.25rem}.p-4{padding:1rem}.p-12{padding:3rem}.p-8{padding:2rem}.p-1{padding:.25rem}.p-6{padding:1.5rem}.p-0{padding:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-0{padding-left:0;padding-right:0}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-0{padding-top:0;padding-bottom:0}.px-3{padding-left:.75rem;padding-right:.75rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-16{padding-left:4rem;padding-right:4rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.px-12{padding-left:3rem;padding-right:3rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.pt-10{padding-top:2.5rem}.pt-0\.5{padding-top:.125rem}.pb-0{padding-bottom:0}.pt-0{padding-top:0}.pt-4{padding-top:1rem}.pl-4{padding-left:1rem}.pb-1{padding-bottom:.25rem}.pt-1{padding-top:.25rem}.pl-2{padding-left:.5rem}.pr-2{padding-right:.5rem}.pt-2{padding-top:.5rem}.pb-4{padding-bottom:1rem}.pt-5{padding-top:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pl-0{padding-left:0}.pr-8{padding-right:2rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.text-sm{font-size:.875rem}.text-xl{font-size:1.25rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.text-4xl{font-size:2.25rem}.text-6xl{font-size:4rem}.text-xs{font-size:.75rem}.text-5xl{font-size:3rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-normal{font-weight:400}.font-extralight{font-weight:200}.font-medium{font-weight:500}.font-light{font-weight:300}.italic{font-style:italic}.leading-6{line-height:1.5rem}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(49 130 206 / var(--tw-text-opacity))}.text-red-900{--tw-text-opacity:1;color:rgb(116 42 42 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 101 101 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(74 85 104 / var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(72 187 120 / var(--tw-text-opacity))}.text-yellow-900{--tw-text-opacity:1;color:rgb(116 66 16 / var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(236 201 75 / var(--tw-text-opacity))}.text-green-900{--tw-text-opacity:1;color:rgb(34 84 61 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(45 55 72 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(113 128 150 / var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-green-700{--tw-text-opacity:1;color:rgb(47 133 90 / var(--tw-text-opacity))}.text-pink-500{--tw-text-opacity:1;color:rgb(237 100 166 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(160 174 192 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(66 153 225 / var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199 / var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(44 82 130 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(26 32 44 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(247 250 252 / var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(246 224 94 / var(--tw-text-opacity))}.text-orange-600{--tw-text-opacity:1;color:rgb(221 107 32 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(203 213 224 / var(--tw-text-opacity))}.text-blue-900{--tw-text-opacity:1;color:rgb(42 67 101 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(229 62 62 / var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(56 161 105 / var(--tw-text-opacity))}.text-yellow-600{--tw-text-opacity:1;color:rgb(214 158 46 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(197 48 48 / var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.line-through{-webkit-text-decoration-line:line-through;text-decoration-line:line-through}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-75{opacity:.75}.opacity-100{opacity:1}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1),0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgb(0 0 0 / 0.1),0 2px 4px -2px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 rgb(0 0 0 / 0.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1),0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgb(0 0 0 / 0.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgb(0 0 0 / 0.1),0 8px 10px -6px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.outline-0{outline-width:0}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-lg{--tw-drop-shadow:drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms}.duration-300{transition-duration:.3s}.btn{font-weight:400;line-height:1.5rem;letter-spacing:.025em;font-family:'Balsamiq Sans',sans-serif;border-radius:.25rem;border-width:1px;border-bottom-width:4px;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.25rem;display:inline-block;--tw-border-opacity:1;border-color:rgb(43 108 176 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(66 153 225 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));-webkit-text-decoration-line:none;text-decoration-line:none}.btn:hover{--tw-border-opacity:1;border-color:rgb(66 153 225 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(99 179 237 / var(--tw-bg-opacity))}.btn:hover:active{--tw-border-opacity:1;border-color:rgb(43 108 176 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(43 108 176 / var(--tw-bg-opacity))}.menubar-item{display:block;cursor:pointer;border-bottom-width:4px;letter-spacing:.025em;--tw-border-opacity:1;border-color:rgb(247 250 252 / var(--tw-border-opacity))}.menubar-item:hover{--tw-border-opacity:1;border-color:rgb(247 250 252 / var(--tw-border-opacity))}.menubar-item.active{--tw-border-opacity:1!important;border-color:rgb(49 130 206 / var(--tw-border-opacity))!important}.menubar-text{align-items:center;padding:.25rem;font-size:1rem;-webkit-text-decoration-line:none;text-decoration-line:none;font-family:'Balsamiq Sans',sans-serif}@media (min-width:1024px){.menubar-text{font-size:1.25rem}}.menubar-text{--tw-text-opacity:1;color:rgb(49 130 206 / var(--tw-text-opacity))}#output,#quiz_question_output_container{font-family:Monaco,Menlo,'Ubuntu Mono',Consolas,source-code-pro,monospace}.dropdown-menu{position:absolute;display:block;width:-moz-max-content;width:max-content;overflow:hidden;border-radius:.375rem;padding:1rem;--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1),0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}[dir=ltr] .dropdown-menu{right:0;margin-right:.25rem}[dir=rtl] .dropdown-menu{left:0;margin-left:.25rem}.dropdown-menu{top:40px;cursor:auto}.dropdown-blue{border-width:2px;--tw-border-opacity:1;border-color:rgb(66 153 225 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(247 250 252 / var(--tw-bg-opacity))}.dropdown-green{border-width:2px;--tw-border-opacity:1;border-color:rgb(72 187 120 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(247 250 252 / var(--tw-bg-opacity))}.dropdown-menu h2{margin-left:1rem;margin-right:1rem;margin-bottom:.5rem;padding-bottom:.5rem;text-align:center;font-weight:500}.dropdown-green h2{--tw-text-opacity:1;color:rgb(56 161 105 / var(--tw-text-opacity))}.dropdown-item{display:block;white-space:nowrap;padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;padding-right:1rem;--tw-text-opacity:1;color:rgb(45 55 72 / var(--tw-text-opacity));-webkit-text-decoration-line:none;text-decoration-line:none}.dropdown-item:hover{--tw-bg-opacity:1;background-color:rgb(49 130 206 / var(--tw-bg-opacity))}.dropdown-item{width:13rem;cursor:pointer;border-radius:.375rem;font-weight:500;flex-grow:0}.dropdown-item:hover{--tw-bg-opacity:1;background-color:rgb(49 130 206 / var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-shadow{text-shadow:0 2px 4px rgba(0,0,0,.1)}.text-shadow-md{text-shadow:0 4px 8px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.08)}.text-shadow-lg{text-shadow:0 15px 30px rgba(0,0,0,.11),0 5px 15px rgba(0,0,0,.08)}.text-shadow-none{text-shadow:none}ul{list-style:disc outside none}ol{list-style:decimal outside none}.text-business-copy ol,.text-business-copy ul,.text-display-copy ol,.text-display-copy ul{margin-left:2.5rem}.text-adventure-copy ol,.text-adventure-copy ul{margin-left:2rem}.text-business-copy ol li+li,.text-business-copy ul li+li,.text-display-copy ol li+li,.text-display-copy ul li+li{margin-top:.5rem}.text-adventure-copy ol li+li,.text-adventure-copy ul li+li{margin-top:.25rem}input:disabled{--tw-bg-opacity:1;background-color:rgb(203 213 224 / var(--tw-bg-opacity))}input[type=checkbox],input[type=radio]{height:1.25rem;width:1.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-width:1px;--tw-border-opacity:1;border-color:rgb(74 85 104 / var(--tw-border-opacity))}input[type=radio]{border-radius:9999px}#change_password input:required,#profile input:required,#signup input:required,#signup select:required{border-width:1px;--tw-border-opacity:1;border-color:rgb(252 129 129 / var(--tw-border-opacity))}input:required:valid,select:required:valid{--tw-border-opacity:1!important;border-color:rgb(104 211 145 / var(--tw-border-opacity))!important}input[type=checkbox]:checked,input[type=radio]:checked{--tw-border-opacity:1;border-color:rgb(56 161 105 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(104 211 145 / var(--tw-bg-opacity))}input,select{border-width:1px;--tw-border-opacity:1;border-color:rgb(203 213 224 / var(--tw-border-opacity))}table.users thead{font-weight:700}table.users td{padding:10px;border:solid 1px gray}body[dir=ltr] .right-hand-shadow{box-shadow:inset -7px 0 9px -7px rgba(0,0,0,.4)}body[dir=rtl] .right-hand-shadow{box-shadow:inset 7px 0 9px -7px rgba(0,0,0,.4)}.tab{margin-top:.5rem;cursor:pointer;border-top-left-radius:.5rem;border-top-right-radius:.5rem;border-top-width:8px;--tw-border-opacity:1;border-color:rgb(226 232 240 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(247 250 252 / var(--tw-bg-opacity));padding-top:.5rem;padding-bottom:.5rem;padding-left:.25rem;padding-right:.25rem;font-size:.875rem;box-shadow:inset 0 -4px 4px -1px rgba(0,0,0,.1)}.teacher_tab{--tw-border-opacity:1;border-color:rgb(154 230 180 / var(--tw-border-opacity))}.special_tab{--tw-border-opacity:1;border-color:rgb(144 205 244 / var(--tw-border-opacity))}.command_tab{--tw-border-opacity:1;border-color:rgb(253 178 197 / var(--tw-border-opacity))}.active-bluebar-btn{--tw-bg-opacity:1;background-color:rgb(144 205 244 / var(--tw-bg-opacity));box-shadow:inset 0 2px 4px 0 rgb(0 0 10 / .3)}@media (min-width:1024px){.tab{padding-left:.5rem;padding-right:.5rem}}@media (min-width:1280px){.tab{padding-left:1rem;padding-right:1rem}}.tab+.tab{box-shadow:inset 0 -4px 4px -1px rgba(0,0,0,.1),inset 4px 0 4px -1px rgba(0,0,0,.1)}.tab-selected{margin-top:0;border-top-left-radius:.5rem;border-top-right-radius:.5rem;border-top-width:8px;border-right-width:1px;border-left-width:1px;--tw-border-opacity:1;border-color:rgb(237 100 166 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));padding-top:.5rem;font-weight:400;--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity));box-shadow:none!important}div#errorbox,div#warningbox{position:relative}[dir=ltr] p.close-dialog{right:5px}[dir=rtl] p.close-dialog{left:5px}p.close-dialog{font-weight:700;position:absolute;top:5px;cursor:pointer}.editor-error{position:absolute;border-bottom-width:2px;border-top-width:2px;--tw-border-opacity:1;border-color:rgb(245 101 101 / var(--tw-border-opacity));background-color:rgb(66 153 225 / .7);z-index:10}.disabled-line{position:absolute;border-top:solid 1px #fff;margin-top:.6em;border-radius:0!important}.debugger-current-line{position:absolute;background:#2d6099;z-index:20}.expandable-docs-text h1{margin-top:30px;margin-bottom:30px}#quiz-iframe{height:72rem;-moz-transform-origin:0 0;-o-transform-origin:0 0;-webkit-transform-origin:0 0}.stats-period-toggle.active{color:#000;text-decoration:none;cursor:default;font-weight:400}.stats-legend{list-style-type:none}.stats-legend-item{display:inline;padding-right:15px;cursor:default}.stats-legend-color-box{width:45px;height:12px;display:inline-block;margin-right:5px}.accordion .accordion-tab input~.tab-content{max-height:0;transition:max-height .35s}[dir=ltr] .accordion .accordion-tab label::before{right:0;float:right}[dir=rtl] .accordion .accordion-tab label::before{left:0;float:left}.accordion .accordion-tab label::before{top:0;display:block;width:1.5em;height:1.5em;line-height:1.5;font-size:1.25rem;font-weight:bolder;text-align:center;transition:all .35s}.accordion .accordion-tab input:checked~.tab-content{max-height:3000vh}[dir=ltr] .accordion .accordion-tab input[type=checkbox]+label::before{right:5px}[dir=rtl] .accordion .accordion-tab input[type=checkbox]+label::before{left:5px}.accordion .accordion-tab input[type=checkbox]+label::before{content:">";transform:rotate(90deg)}.accordion .accordion-tab input[type=checkbox]:checked+label::before{transform:rotate(270deg)}.explore-program-box{position:relative;height:18rem;width:16rem;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(74 85 104 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(190 227 248 / var(--tw-bg-opacity))}.explore-program-box-title{margin-top:-2rem;width:18rem;padding-top:2.5rem;text-align:center;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}[dir=ltr] .explore-program-box-title{margin-left:-.5rem;--tw-rotate:6deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));padding-left:3rem}[dir=rtl] .explore-program-box-title{margin-right:-.5rem;--tw-rotate:-6deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));padding-right:3rem}.section-header{cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(190 227 248 / var(--tw-bg-opacity));padding-left:2rem;padding-right:2rem;padding-top:.5rem;padding-bottom:.5rem;font-size:1.875rem}.profile-section-body-header{margin-bottom:1rem;display:inline-block;width:100%;border-bottom-width:1px;padding-bottom:.5rem}.profile-section-body{margin-left:auto;margin-right:auto;display:none;width:100%;border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));padding-left:2rem;padding-right:2rem;padding-top:1rem;padding-bottom:1rem;--tw-shadow:0 4px 6px -1px rgb(0 0 0 / 0.1),0 2px 4px -2px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}@media (min-width:1024px){.profile-section-body{width:75%}}.personal-input{display:block;width:75%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;padding-left:1rem;padding-right:1rem;padding-top:.25rem;padding-bottom:.25rem;--tw-text-opacity:1;color:rgb(74 85 104 / var(--tw-text-opacity))}@media (min-width:1024px){.personal-input{width:50%}}.signup-container{margin-left:auto;margin-right:auto;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding-left:2rem;padding-right:2rem}.signup-label{display:inline-block;width:33.333333%}@media (min-width:768px){.signup-label{width:12rem}}.signup-input{display:inline-block;width:66.666667%;border-radius:.5rem;--tw-border-opacity:1;border-color:rgb(203 213 224 / var(--tw-border-opacity));padding-left:.5rem;padding-right:.5rem;padding-top:.25rem;padding-bottom:.25rem}@media (min-width:768px){.signup-input{width:20rem}}@media (min-width:1024px){.signup-input{width:24rem}}[dir=ltr] .toggle-circle{left:0}[dir=rtl] .toggle-circle{right:0}.toggle-circle{transition:all .2s ease-in-out}body[dir=ltr] input:checked~.toggle-circle{transform:translateX(100%);--tw-bg-opacity:1;background-color:rgb(104 211 145 / var(--tw-bg-opacity))}body[dir=rtl] input:checked~.toggle-circle{transform:translateX(-100%);--tw-bg-opacity:1;background-color:rgb(104 211 145 / var(--tw-bg-opacity))}input:checked~.toggle-path{--tw-bg-opacity:1;background-color:rgb(113 128 150 / var(--tw-bg-opacity))}.focused-option{border-width:8px;border-style:double}.menubar-item.focused-option{--tw-border-opacity:1!important;border-color:rgb(49 130 206 / var(--tw-border-opacity))!important}.stats-period-toggle.focused-option{color:#000;text-decoration:none;cursor:default;font-weight:400}.focused-option{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.incorrect-option{background-color:rgba(234,55,55,.6)!important;border:5px #c21919 dashed!important}.quiz-icons{position:relative;height:3.5rem;width:3.5rem;top:-40px;left:-10px}.animate-keys{position:absolute;bottom:.25rem;right:.5rem;animation-name:animate-keys;animation-duration:1.5s;animation-timing-function:ease-in-out;-webkit-animation-timing-function:ease-in-out}@keyframes animate-keys{0%{bottom:15px;font-size:1em;opacity:1}100%{bottom:100%;font-size:4em;opacity:0}}.drop-adventures-hint{--tw-border-opacity:1;border-color:rgb(144 205 244 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(235 248 255 / var(--tw-bg-opacity))}.drop-adventures-active{--tw-border-opacity:1;border-color:rgb(250 240 137 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 240 / var(--tw-bg-opacity))}.adventures-tab{width:auto;flex-direction:row;overflow-x:auto;overflow-y:hidden}.adventures-tab[style*='display: block']{display:flex!important}.profile-nametag__stats{display:flex;width:100%;flex-direction:row;align-items:stretch;justify-content:center;text-align:center}.switch{position:relative;display:inline-block;width:30px;height:17px}.switch input{opacity:0;width:0;height:0}.slider{--tw-bg-opacity:1;background-color:rgb(203 213 224 / var(--tw-bg-opacity));position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;transition:.4s}.slider:before{position:absolute;content:"";height:13px;width:13px;left:2px;bottom:2px;background-color:#fff;transition:.4s}input:checked+.slider{--tw-bg-opacity:1;background-color:rgb(72 187 120 / var(--tw-bg-opacity))}input:checked+.slider:before{transform:translateX(13px)}.slider.round{border-radius:34px}.slider.round:before{border-radius:50%}input:disabled::-moz-placeholder{--tw-text-opacity:1;color:rgb(74 85 104 / var(--tw-text-opacity))}input:disabled::placeholder{--tw-text-opacity:1;color:rgb(74 85 104 / var(--tw-text-opacity))}.htmx-indicator.custom-indicator{opacity:0;transition:opacity 0s ease-in}.htmx-request .custom-indicator{opacity:1}.htmx-request.custom-indicator{opacity:1}div[class^=ace_incorrect_hedy_code]{border-bottom:2px dashed red;position:absolute;cursor:pointer!important;pointer-events:auto}.student_adventure_checkbox[disabled]{position:relative!important;border-radius:.25rem!important;--tw-border-opacity:1!important;border-color:rgb(160 174 192 / var(--tw-border-opacity))!important;--tw-bg-opacity:1!important;background-color:rgb(237 242 247 / var(--tw-bg-opacity))!important}.student_adventure_checkbox{position:relative!important;border-radius:.25rem!important;--tw-border-opacity:1!important;border-color:rgb(160 174 192 / var(--tw-border-opacity))!important;--tw-bg-opacity:1!important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.student_adventure_checkbox:checked{position:relative!important;border-radius:.25rem!important;--tw-border-opacity:1!important;border-color:rgb(160 174 192 / var(--tw-border-opacity))!important;--tw-bg-opacity:1!important;background-color:rgb(154 230 180 / var(--tw-bg-opacity))!important}.hover\:rounded-full:hover{border-radius:9999px}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(144 205 244 / var(--tw-border-opacity))}.hover\:border-green-400:hover{--tw-border-opacity:1;border-color:rgb(104 211 145 / var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(49 130 206 / var(--tw-border-opacity))}.hover\:bg-black\/75:hover{background-color:rgb(0 0 0 / .75)}.hover\:bg-green-400:hover{--tw-bg-opacity:1;background-color:rgb(104 211 145 / var(--tw-bg-opacity))}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(235 248 255 / var(--tw-bg-opacity))}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgb(99 179 237 / var(--tw-bg-opacity))}.hover\:bg-green-300:hover{--tw-bg-opacity:1;background-color:rgb(154 230 180 / var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240 / var(--tw-bg-opacity))}.hover\:bg-blue-300:hover{--tw-bg-opacity:1;background-color:rgb(144 205 244 / var(--tw-bg-opacity))}.hover\:bg-gray-400:hover{--tw-bg-opacity:1;background-color:rgb(203 213 224 / var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(49 130 206 / var(--tw-bg-opacity))}.hover\:bg-gray-400\/50:hover{background-color:rgb(203 213 224 / .5)}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(252 129 129 / var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:underline:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:bg-blue-100:focus{--tw-bg-opacity:1;background-color:rgb(235 248 255 / var(--tw-bg-opacity))}.group:hover .group-hover\:opacity-100{opacity:1}[dir=ltr] .ltr\:-left-1{left:-.25rem}[dir=ltr] .ltr\:-left-2{left:-.5rem}[dir=ltr] .ltr\:-right-1{right:-.25rem}[dir=ltr] .ltr\:right-0{right:0}[dir=ltr] .ltr\:clear-right{clear:right}[dir=ltr] .ltr\:mr-2{margin-right:.5rem}[dir=ltr] .ltr\:mr-4{margin-right:1rem}[dir=ltr] .ltr\:ml-auto{margin-left:auto}[dir=ltr] .ltr\:mr-5{margin-right:1.25rem}[dir=ltr] .ltr\:ml-3{margin-left:.75rem}[dir=ltr] .ltr\:mr-auto{margin-right:auto}[dir=ltr] .ltr\:ml-8{margin-left:2rem}[dir=ltr] .ltr\:ml-0{margin-left:0}[dir=ltr] .ltr\:mr-3{margin-right:.75rem}[dir=ltr] .ltr\:mr-1{margin-right:.25rem}[dir=ltr] .ltr\:ml-2{margin-left:.5rem}[dir=ltr] .ltr\:ml-4{margin-left:1rem}[dir=ltr] .ltr\:ml-1{margin-left:.25rem}[dir=ltr] .ltr\:mr-24{margin-right:6rem}[dir=ltr] .ltr\:hidden{display:none}[dir=ltr] .ltr\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}[dir=ltr] .ltr\:pr-4{padding-right:1rem}[dir=ltr] .ltr\:pr-8{padding-right:2rem}[dir=ltr] .ltr\:pl-2{padding-left:.5rem}[dir=ltr] .ltr\:pl-4{padding-left:1rem}[dir=ltr] .ltr\:pl-8{padding-left:2rem}[dir=ltr] .ltr\:text-left{text-align:left}[dir=ltr] .ltr\:text-right{text-align:right}[dir=rtl] .rtl\:-right-1{right:-.25rem}[dir=rtl] .rtl\:-right-2{right:-.5rem}[dir=rtl] .rtl\:-left-1{left:-.25rem}[dir=rtl] .rtl\:left-0{left:0}[dir=rtl] .rtl\:left-2{left:.5rem}[dir=rtl] .rtl\:clear-left{clear:left}[dir=rtl] .rtl\:ml-2{margin-left:.5rem}[dir=rtl] .rtl\:ml-4{margin-left:1rem}[dir=rtl] .rtl\:mr-auto{margin-right:auto}[dir=rtl] .rtl\:ml-5{margin-left:1.25rem}[dir=rtl] .rtl\:mr-3{margin-right:.75rem}[dir=rtl] .rtl\:ml-auto{margin-left:auto}[dir=rtl] .rtl\:mr-8{margin-right:2rem}[dir=rtl] .rtl\:mr-0{margin-right:0}[dir=rtl] .rtl\:ml-3{margin-left:.75rem}[dir=rtl] .rtl\:ml-1{margin-left:.25rem}[dir=rtl] .rtl\:mr-2{margin-right:.5rem}[dir=rtl] .rtl\:mr-4{margin-right:1rem}[dir=rtl] .rtl\:mr-1{margin-right:.25rem}[dir=rtl] .rtl\:ml-24{margin-left:6rem}[dir=rtl] .rtl\:hidden{display:none}[dir=rtl] .rtl\:divide-x-reverse>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}[dir=rtl] .rtl\:pl-4{padding-left:1rem}[dir=rtl] .rtl\:pl-8{padding-left:2rem}[dir=rtl] .rtl\:pr-2{padding-right:.5rem}[dir=rtl] .rtl\:pr-4{padding-right:1rem}[dir=rtl] .rtl\:pr-8{padding-right:2rem}[dir=rtl] .rtl\:text-left{text-align:left}[dir=rtl] .rtl\:text-right{text-align:right}@media (min-width:640px){.sm\:block{display:block}.sm\:inline{display:inline}.sm\:w-5\/12{width:41.666667%}}@media (min-width:768px){.md\:order-4{order:4}.md\:mx-16{margin-left:4rem;margin-right:4rem}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-64{height:16rem}.md\:w-3\/12{width:25%}.md\:w-2\/5{width:40%}.md\:w-3\/5{width:60%}.md\:grid-flow-row-dense{grid-auto-flow:row dense}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:gap-8{gap:2rem}.md\:py-16{padding-top:4rem;padding-bottom:4rem}.md\:px-16{padding-left:4rem;padding-right:4rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width:1024px){.lg\:mx-16{margin-left:4rem;margin-right:4rem}.lg\:inline-block{display:inline-block}.lg\:flex{display:flex}.lg\:h-16{height:4rem}.lg\:h-10{height:2.5rem}.lg\:w-1\/12{width:8.333333%}.lg\:w-1\/2{width:50%}.lg\:w-3\/4{width:75%}.lg\:w-12{width:3rem}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:px-0{padding-left:0;padding-right:0}}@media (min-width:1280px){.xl\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}} diff --git a/static/js/appbundle.js b/static/js/appbundle.js index 00483922712..c5d48dab5d5 100644 --- a/static/js/appbundle.js +++ b/static/js/appbundle.js @@ -170,7 +170,7 @@ You did great!`,Transpile_warning:"Warning!",Unsaved_Changes:"You have an unsave \u0130nan\u0131lmaz! \u0130yi i\u015Fti, Aferin! M\xFCkemmel! -\xC7ok iyiydin!`,Transpile_warning:"Uyar\u0131!",Unsaved_Changes:"Kaydedilmemi\u015F bir program\u0131n var. Kaydetmeden ayr\u0131lmak m\u0131 istiyorsun?",adventures_restored:"Varsay\u0131lan maceralar geri y\xFCklendi.",copy_link_to_share:"Payla\u015Fmak i\xE7in ba\u011Flant\u0131y\u0131 kopyalay\u0131n",customization_deleted:"\xD6zelle\u015Ftirmeler ba\u015Far\u0131yla silindi.",dice:"\u{1F3B2}",directly_available:"Do\u011Frudan a\xE7\u0131n",disabled:"Devre d\u0131\u015F\u0131",fortune:"\u{1F52E}, \u2728",haunted:"\u{1F987}, \u{1F47B}, \u{1F383}",level_title:"Seviye",restaurant:"\u{1F363}, \u{1F355}, \u{1F354}",rock:"\u2702\uFE0F, \u{1F4DC}, \u{1F5FB}",songs:"\u{1F3B5},\u{1F3B6}",teacher_welcome:"Hedy'ye ho\u015F geldiniz! Art\u0131k s\u0131n\u0131flar olu\u015Fturman\u0131za ve \xF6\u011Frencileri davet etmenize olanak tan\u0131yan bir \xF6\u011Fretmen hesab\u0131n\u0131n gururlu sahibisiniz.",turtle:"\u{1F422}",unsaved_class_changes:"Kaydedilmemi\u015F de\u011Fi\u015Fiklikler var, bu sayfadan ayr\u0131lmak istedi\u011Finize emin misiniz?"},uk:{CheckInternet:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435, \u0447\u0438 \u0432\u0430\u0448\u0435 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0434\u043E \u0406\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0443 \u043F\u0440\u0430\u0446\u044E\u0454 \u043D\u0430\u043B\u0435\u0436\u043D\u0438\u043C \u0447\u0438\u043D\u043E\u043C.",Connection_error:"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u0434\u043E \u0441\u0435\u0440\u0432\u0435\u0440\u0430.",Empty_output:"\u0426\u0435\u0439 \u043A\u043E\u0434 \u043F\u0440\u0430\u0446\u044E\u0454, \u0430\u043B\u0435 \u043D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0434\u0440\u0443\u043A\u0443\u0454. \u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0434\u0440\u0443\u043A\u0443 \u0434\u043E \u0441\u0432\u043E\u0433\u043E \u043A\u043E\u0434\u0443 \u0430\u0431\u043E \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u0447\u0435\u0440\u0435\u043F\u0430\u0445\u0443, \u0449\u043E\u0431 \u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u0432\u0438\u0432\u0456\u0434.",Errors_found:"You made a mistake! Don't worry, Hedy is trying to find the mistakes",Execute_error:"\u0429\u043E\u0441\u044C \u043F\u0456\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A \u043F\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u043F\u0443\u0441\u043A\u0443 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0438.",Other_error:"\u041E\u0439! \u041C\u043E\u0436\u043B\u0438\u0432\u043E, \u043C\u0438 \u0442\u0440\u043E\u0445\u0438 \u043F\u043E\u043C\u0438\u043B\u0438\u043B\u0438\u0441\u044F.",Program_repair:"\u0426\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043E\u0434, \u0432\u0438 \u043C\u043E\u0436\u0435\u0442\u0435 \u0439\u043E\u0433\u043E \u0432\u0438\u043F\u0440\u0430\u0432\u0438\u0442\u0438?",Program_too_long:"\u0412\u0430\u0448\u0430 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0430 \u0432\u0438\u043A\u043E\u043D\u0443\u0454\u0442\u044C\u0441\u044F \u043D\u0430\u0434\u0442\u043E \u0434\u043E\u0432\u0433\u043E.",ServerError:"\u0412\u0438 \u043D\u0430\u043F\u0438\u0441\u0430\u043B\u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0443, \u044F\u043A\u0443 \u043C\u0438 \u043D\u0435 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043B\u0438. \u042F\u043A\u0449\u043E \u0432\u0438 \u0445\u043E\u0447\u0435\u0442\u0435 \u0434\u043E\u043F\u043E\u043C\u043E\u0433\u0442\u0438, \u043D\u0430\u0434\u0456\u0448\u043B\u0456\u0442\u044C \u043D\u0430\u043C \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0438\u0439 \u043B\u0438\u0441\u0442 \u0456\u0437 \u0437\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\u043C \u0440\u0456\u0432\u043D\u044F \u0442\u0430 \u0432\u0430\u0448\u043E\u0457 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0438 \u043D\u0430 hello@hedy.org. \u0422\u0438\u043C \u0447\u0430\u0441\u043E\u043C \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0449\u043E\u0441\u044C \u0442\u0440\u043E\u0445\u0438 \u0456\u043D\u0448\u0435 \u0442\u0430 \u0449\u0435 \u0440\u0430\u0437 \u043F\u043E\u0434\u0438\u0432\u0456\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u0440\u0438\u043A\u043B\u0430\u0434\u0438. \u0414\u044F\u043A\u0443\u044E!",Transpile_error:"\u041C\u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u043C\u043E \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438 \u0432\u0430\u0448\u0443 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0443.",Transpile_success:`\u0413\u0430\u0440\u043D\u0430 \u0440\u043E\u0431\u043E\u0442\u0430! +\xC7ok iyiydin!`,Transpile_warning:"Uyar\u0131!",Unsaved_Changes:"Kaydedilmemi\u015F bir program\u0131n var. Kaydetmeden ayr\u0131lmak m\u0131 istiyorsun?",adventures_restored:"Varsay\u0131lan maceralar geri y\xFCklendi.",copy_link_to_share:"Payla\u015Fmak i\xE7in ba\u011Flant\u0131y\u0131 kopyalay\u0131n",customization_deleted:"\xD6zelle\u015Ftirmeler ba\u015Far\u0131yla silindi.",dice:"\u{1F3B2}",directly_available:"Do\u011Frudan a\xE7\u0131n",disabled:"Devre d\u0131\u015F\u0131",fortune:"\u{1F52E}, \u2728",haunted:"\u{1F987}, \u{1F47B}, \u{1F383}",level_title:"Seviye",restaurant:"\u{1F363}, \u{1F355}, \u{1F354}",rock:"\u2702\uFE0F, \u{1F4DC}, \u{1F5FB}",songs:"\u{1F3B5},\u{1F3B6}",teacher_welcome:"Hedy'ye ho\u015F geldiniz! Art\u0131k s\u0131n\u0131flar olu\u015Fturman\u0131za ve \xF6\u011Frencileri davet etmenize olanak tan\u0131yan bir \xF6\u011Fretmen hesab\u0131n\u0131n gururlu sahibisiniz.",turtle:"\u{1F422}",unsaved_class_changes:"Kaydedilmemi\u015F de\u011Fi\u015Fiklikler var, bu sayfadan ayr\u0131lmak istedi\u011Finize emin misiniz?"},uk:{CheckInternet:"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435, \u0447\u0438 \u0432\u0430\u0448\u0435 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0434\u043E \u0406\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0443 \u043F\u0440\u0430\u0446\u044E\u0454 \u043D\u0430\u043B\u0435\u0436\u043D\u0438\u043C \u0447\u0438\u043D\u043E\u043C.",Connection_error:"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u0434\u043E \u0441\u0435\u0440\u0432\u0435\u0440\u0430.",Empty_output:"\u0426\u0435\u0439 \u043A\u043E\u0434 \u043F\u0440\u0430\u0446\u044E\u0454, \u0430\u043B\u0435 \u043D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0434\u0440\u0443\u043A\u0443\u0454. \u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0434\u0440\u0443\u043A\u0443 \u0434\u043E \u0441\u0432\u043E\u0433\u043E \u043A\u043E\u0434\u0443 \u0430\u0431\u043E \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u0447\u0435\u0440\u0435\u043F\u0430\u0445\u0443, \u0449\u043E\u0431 \u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u0432\u0438\u0432\u0456\u0434.",Errors_found:"\u0412\u0438 \u0437\u0440\u043E\u0431\u0438\u043B\u0438 \u043F\u043E\u043C\u0438\u043B\u043A\u0443! \u041D\u0435 \u0442\u0443\u0440\u0431\u0443\u0439\u0442\u0435\u0441\u044F, \u043C\u0438 \u043F\u0440\u043E\u0434\u043E\u0432\u0438\u043C\u043E \u0432\u0438\u043A\u043E\u043D\u0443\u0432\u0430\u0442\u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0443",Execute_error:"\u0429\u043E\u0441\u044C \u043F\u0456\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A \u043F\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u043F\u0443\u0441\u043A\u0443 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0438.",Other_error:"\u041E\u0439! \u041C\u043E\u0436\u043B\u0438\u0432\u043E, \u043C\u0438 \u0442\u0440\u043E\u0445\u0438 \u043F\u043E\u043C\u0438\u043B\u0438\u043B\u0438\u0441\u044F.",Program_repair:"\u0426\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043E\u0434, \u0432\u0438 \u043C\u043E\u0436\u0435\u0442\u0435 \u0439\u043E\u0433\u043E \u0432\u0438\u043F\u0440\u0430\u0432\u0438\u0442\u0438?",Program_too_long:"\u0412\u0430\u0448\u0430 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0430 \u0432\u0438\u043A\u043E\u043D\u0443\u0454\u0442\u044C\u0441\u044F \u043D\u0430\u0434\u0442\u043E \u0434\u043E\u0432\u0433\u043E.",ServerError:"\u0412\u0438 \u043D\u0430\u043F\u0438\u0441\u0430\u043B\u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0443, \u044F\u043A\u0443 \u043C\u0438 \u043D\u0435 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043B\u0438. \u042F\u043A\u0449\u043E \u0432\u0438 \u0445\u043E\u0447\u0435\u0442\u0435 \u0434\u043E\u043F\u043E\u043C\u043E\u0433\u0442\u0438, \u043D\u0430\u0434\u0456\u0448\u043B\u0456\u0442\u044C \u043D\u0430\u043C \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0438\u0439 \u043B\u0438\u0441\u0442 \u0456\u0437 \u0437\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\u043C \u0440\u0456\u0432\u043D\u044F \u0442\u0430 \u0432\u0430\u0448\u043E\u0457 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0438 \u043D\u0430 hello@hedy.org. \u0422\u0438\u043C \u0447\u0430\u0441\u043E\u043C \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0449\u043E\u0441\u044C \u0442\u0440\u043E\u0445\u0438 \u0456\u043D\u0448\u0435 \u0442\u0430 \u0449\u0435 \u0440\u0430\u0437 \u043F\u043E\u0434\u0438\u0432\u0456\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u0440\u0438\u043A\u043B\u0430\u0434\u0438. \u0414\u044F\u043A\u0443\u044E!",Transpile_error:"\u041C\u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u043C\u043E \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438 \u0432\u0430\u0448\u0443 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0443.",Transpile_success:`\u0413\u0430\u0440\u043D\u0430 \u0440\u043E\u0431\u043E\u0442\u0430! \u0414\u0438\u0432\u043E\u0432\u0438\u0436\u043D\u043E! \u0427\u0443\u0434\u043E\u0432\u0430 \u0440\u043E\u0431\u043E\u0442\u0430! \u0427\u0443\u0434\u043E\u0432\u043E! diff --git a/static/js/appbundle.js.map b/static/js/appbundle.js.map index c1312a74c7f..ab142d9eabd 100644 --- a/static/js/appbundle.js.map +++ b/static/js/appbundle.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["syntaxModesRules.ts", "message-translations.ts", "client-messages.ts", "modal.ts", "../../node_modules/jszip/dist/jszip.min.js", "event-emitter.ts", "tabs.ts", "pythonPrefixes.ts", "types.ts", "tutorials/utils.ts", "browser-helpers/unsaved-changes.ts", "tutorials/intro.ts", "tutorials/teacher.ts", "tutorials/level1.ts", "tutorials/tutorial.ts", "parsons.ts", "browser-helpers/on-element-becomes-visible.ts", "editor.ts", "ace-editor.ts", "debugging.ts", "local.ts", "../../node_modules/dompurify/src/utils.js", "../../node_modules/dompurify/src/tags.js", "../../node_modules/dompurify/src/attrs.js", "../../node_modules/dompurify/src/regexp.js", "../../node_modules/dompurify/src/purify.js", "teachers.ts", "comm.ts", "auth.ts", "local-save-warning.ts", "../../node_modules/@codemirror/state/dist/index.cjs", "../../node_modules/style-mod/dist/style-mod.cjs", "../../node_modules/w3c-keyname/index.cjs", "../../node_modules/@codemirror/view/dist/index.cjs", "../../node_modules/@lezer/common/dist/index.cjs", "../../node_modules/@lezer/highlight/dist/index.cjs", "../../node_modules/@codemirror/language/dist/index.cjs", "../../node_modules/@codemirror/commands/dist/index.cjs", "../../node_modules/crelt/dist/index.cjs", "../../node_modules/@codemirror/search/dist/index.cjs", "cm-decorations.ts", "../../node_modules/@lezer/lr/dist/index.cjs", "lezer-parsers/level1-parser.terms.ts", "lezer-parsers/level2-parser.terms.ts", "lezer-parsers/level3-parser.terms.ts", "lezer-parsers/level4-parser.terms.ts", "lezer-parsers/level5-parser.terms.ts", "lezer-parsers/level6-parser.terms.ts", "lezer-parsers/level7-parser.terms.ts", "lezer-parsers/level8-parser.terms.ts", "lezer-parsers/level10-parser.terms.ts", "lezer-parsers/level11-parser.terms.ts", "lezer-parsers/level12-parser.terms.ts", "lezer-parsers/level13-parser.terms.ts", "lezer-parsers/level14-parser.terms.ts", "lezer-parsers/level15-parser.terms.ts", "lezer-parsers/level16-parser.terms.ts", "lezer-parsers/level17-parser.terms.ts", "lezer-parsers/level18-parser.terms.ts", "lezer-parsers/tokens.ts", "lezer-parsers/level1-parser.ts", "lezer-parsers/level2-parser.ts", "lezer-parsers/level3-parser.ts", "lezer-parsers/level4-parser.ts", "lezer-parsers/level5-parser.ts", "lezer-parsers/level6-parser.ts", "lezer-parsers/level7-parser.ts", "lezer-parsers/level8-parser.ts", "lezer-parsers/level9-parser.ts", "lezer-parsers/level10-parser.ts", "lezer-parsers/level11-parser.ts", "lezer-parsers/level12-parser.ts", "lezer-parsers/level13-parser.ts", "lezer-parsers/level14-parser.ts", "lezer-parsers/level15-parser.ts", "lezer-parsers/level16-parser.ts", "lezer-parsers/level17-parser.ts", "lezer-parsers/level18-parser.ts", "lezer-parsers/language-packages.ts", "cm-monokai-theme.ts", "cm-editor.ts", "app.ts", "../../node_modules/sortablejs/Sortable.min.js", "htmx-integration.ts", "../../node_modules/chart.js/dist/chart.js", "statistics.ts", "logs.ts", "admin.ts", "initialize.ts", "index.ts"], "sourcesContent": [null, null, null, null, "/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n let property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n hasOwnProperty,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n]);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n]);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n]);\n\nexport const text = freeze(['#text']);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot',\n]);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n]);\n", "import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\n", "import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n freeze,\n arrayForEach,\n arrayPop,\n arrayPush,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (\n document.currentScript &&\n document.currentScript.hasAttribute(ATTR_NAME)\n ) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n const DOMPurify = (root) => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = VERSION;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n const originalDocument = window.document;\n\n let { document } = window;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n const trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n originalDocument\n );\n const emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof getParentNode === 'function' &&\n implementation &&\n typeof implementation.createHTMLDocument !== 'undefined' &&\n documentMode !== 9;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n const CUSTOM_ELEMENT_HANDLING = Object.seal(\n Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks? */\n let SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n 'ALLOWED_TAGS' in cfg\n ? addToSet({}, cfg.ALLOWED_TAGS)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n 'ALLOWED_ATTR' in cfg\n ? addToSet({}, cfg.ALLOWED_ATTR)\n : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES =\n 'ADD_URI_SAFE_ATTR' in cfg\n ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR)\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n 'ADD_DATA_URI_TAGS' in cfg\n ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS)\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS =\n 'FORBID_CONTENTS' in cfg\n ? addToSet({}, cfg.FORBID_CONTENTS)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? (x) => x\n : stringToLowerCase;\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml',\n ]);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erronously deleted from\n // HTML namespace.\n const commonSvgAndHTMLElements = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG or MathML). Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function (node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function (name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node,\n });\n }\n\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty) {\n /* Create a HTML document */\n let doc;\n let leadingWhitespace;\n\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml') {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty =\n '' +\n dirty +\n '';\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(\n doc,\n WHOLE_DOCUMENT ? 'html' : 'body'\n )[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n const _createIterator = function (root) {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT,\n null,\n false\n );\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function (elm) {\n return (\n elm instanceof HTMLFormElement &&\n (typeof elm.nodeName !== 'string' ||\n typeof elm.textContent !== 'string' ||\n typeof elm.removeChild !== 'function' ||\n !(elm.attributes instanceof NamedNodeMap) ||\n typeof elm.removeAttribute !== 'function' ||\n typeof elm.setAttribute !== 'function' ||\n typeof elm.namespaceURI !== 'string' ||\n typeof elm.insertBefore !== 'function')\n );\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function (object) {\n return typeof Node === 'object'\n ? object instanceof Node\n : object &&\n typeof object === 'object' &&\n typeof object.nodeType === 'number' &&\n typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function (entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], (hook) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode) {\n let content;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check if tagname contains Unicode */\n if (stringMatch(currentNode.nodeName, /[\\u0080-\\uFFFF]/)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n !_isNode(currentNode.firstElementChild) &&\n (!_isNode(currentNode.content) ||\n !_isNode(currentNode.content.firstElementChild)) &&\n regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Mitigate a problem with templates inside select */\n if (\n tagName === 'select' &&\n regExpTest(/