[{"data":1,"prerenderedAt":17084},["ShallowReactive",2],{"navigation_docs":3,"-tailwind-tailwind-animations-transforms":3338,"-tailwind-tailwind-animations-transforms-surround":17079},[4,1707,1904,2358,2539,2608,2815,2937,2987,3044,3078,3204,3281,3334],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"C#","i-devicon-csharp","\u002Fcsharp","01.csharp",[10,13,60,90,120,202,219,253,379,404,457,650,1364,1654,1703],{"title":11,"path":7,"stem":12},"C# та .NET","01.csharp\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":59},"Fundamentals","i-lucide-book-open","\u002Fcsharp\u002Ffundamentals","01.csharp\u002F01.fundamentals",[19,23,27,31,35,39,43,47,51,55],{"title":20,"path":21,"stem":22},"Вступ до екосистеми .NET","\u002Fcsharp\u002Ffundamentals\u002Fintroduction-to-ecosystem","01.csharp\u002F01.fundamentals\u002F01.introduction-to-ecosystem",{"title":24,"path":25,"stem":26},"Структура програми на C#","\u002Fcsharp\u002Ffundamentals\u002Fprogram-structure","01.csharp\u002F01.fundamentals\u002F02.program-structure",{"title":28,"path":29,"stem":30},"Змінні та Типи Даних","\u002Fcsharp\u002Ffundamentals\u002Fvariables-data-types","01.csharp\u002F01.fundamentals\u002F03.variables-data-types",{"title":32,"path":33,"stem":34},"Масиви","\u002Fcsharp\u002Ffundamentals\u002Farrays","01.csharp\u002F01.fundamentals\u002F04.arrays",{"title":36,"path":37,"stem":38},"Strings & Text Handling","\u002Fcsharp\u002Ffundamentals\u002Fstrings-text-handling","01.csharp\u002F01.fundamentals\u002F05.strings-text-handling",{"title":40,"path":41,"stem":42},"Дати і Час","\u002Fcsharp\u002Ffundamentals\u002Fdates-time-handling","01.csharp\u002F01.fundamentals\u002F06.dates-time-handling",{"title":44,"path":45,"stem":46},"Потік Керування","\u002Fcsharp\u002Ffundamentals\u002Fcontrol-flow","01.csharp\u002F01.fundamentals\u002F07.control-flow",{"title":48,"path":49,"stem":50},"Методи","\u002Fcsharp\u002Ffundamentals\u002Fmethods","01.csharp\u002F01.fundamentals\u002F08.methods",{"title":52,"path":53,"stem":54},"Основи Відлагодження","\u002Fcsharp\u002Ffundamentals\u002Fdebugging-basics","01.csharp\u002F01.fundamentals\u002F09.debugging-basics",{"title":56,"path":57,"stem":58},"Інтерактивна Консоль (Classic)","\u002Fcsharp\u002Ffundamentals\u002Finteractive-console","01.csharp\u002F01.fundamentals\u002F10.interactive-console",false,{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":59},"OOP","i-lucide-box","\u002Fcsharp\u002Foop","01.csharp\u002F02.oop",[66,70,74,78,82,86],{"title":67,"path":68,"stem":69},"Package Management (Управління Пакетами)","\u002Fcsharp\u002Foop\u002Fpackage-management","01.csharp\u002F02.oop\u002F01.package-management",{"title":71,"path":72,"stem":73},"Класи та Об'єкти","\u002Fcsharp\u002Foop\u002Fclasses-objects","01.csharp\u002F02.oop\u002F02.classes-objects",{"title":75,"path":76,"stem":77},"Властивості та Поля","\u002Fcsharp\u002Foop\u002Fproperties-fields","01.csharp\u002F02.oop\u002F03.properties-fields",{"title":79,"path":80,"stem":81},"Стовпи ООП","\u002Fcsharp\u002Foop\u002Foop-pillars","01.csharp\u002F02.oop\u002F04.oop-pillars",{"title":83,"path":84,"stem":85},"Advanced Types","\u002Fcsharp\u002Foop\u002Fadvanced-types","01.csharp\u002F02.oop\u002F05.advanced-types",{"title":87,"path":88,"stem":89},"Namespaces (Простори Імен)","\u002Fcsharp\u002Foop\u002Fnamespaces","01.csharp\u002F02.oop\u002F06.namespaces",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":59},"Advanced Core","i-lucide-zap","\u002Fcsharp\u002Fadvanced-core","01.csharp\u002F03.advanced-core",[96,100,104,108,112,116],{"title":97,"path":98,"stem":99},"Generics (Узагальнення)","\u002Fcsharp\u002Fadvanced-core\u002Fgenerics","01.csharp\u002F03.advanced-core\u002F01.generics",{"title":101,"path":102,"stem":103},"Делегати, Події та Лямбда-вирази","\u002Fcsharp\u002Fadvanced-core\u002Fdelegates-events-lambdas","01.csharp\u002F03.advanced-core\u002F02.delegates-events-lambdas",{"title":105,"path":106,"stem":107},"Interfaces Deep Dive (Інтерфейси: Поглиблений Розгляд)","\u002Fcsharp\u002Fadvanced-core\u002Finterfaces-deep-dive","01.csharp\u002F03.advanced-core\u002F03.interfaces-deep-dive",{"title":109,"path":110,"stem":111},"Обробка Винятків","\u002Fcsharp\u002Fadvanced-core\u002Fexception-handling","01.csharp\u002F03.advanced-core\u002F04.exception-handling",{"title":113,"path":114,"stem":115},"Pattern Matching","\u002Fcsharp\u002Fadvanced-core\u002Fpattern-matching","01.csharp\u002F03.advanced-core\u002F05.pattern-matching",{"title":117,"path":118,"stem":119},"Додаткові Можливості C#","\u002Fcsharp\u002Fadvanced-core\u002Fadditional-features","01.csharp\u002F03.advanced-core\u002F06.additional-features",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":59},"Architecture Best Practices","i-lucide-building-2","\u002Fcsharp\u002Farchitecture-best-practices","01.csharp\u002F04.architecture-best-practices",[126,130,149,153,157,161,165,169],{"title":127,"path":128,"stem":129},"Software Design Principles (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fsoftware-design-principles","01.csharp\u002F04.architecture-best-practices\u002F01.software-design-principles",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":59},"Design Patterns","i-lucide-folder","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns",[136],{"title":137,"icon":132,"path":138,"stem":139,"children":140,"page":59},"Creational","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational",[141,145],{"title":142,"path":143,"stem":144},"Singleton (Одинак)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fsingleton","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F01.singleton",{"title":146,"path":147,"stem":148},"Builder (Будівельник)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fbuilder","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F02.builder",{"title":150,"path":151,"stem":152},"Building Professional CLIs","\u002Fcsharp\u002Farchitecture-best-practices\u002Fbuilding-professional-clis","01.csharp\u002F04.architecture-best-practices\u002F03.building-professional-clis",{"title":154,"path":155,"stem":156},"Validation & Flow Control","\u002Fcsharp\u002Farchitecture-best-practices\u002Fvalidation-flow-control","01.csharp\u002F04.architecture-best-practices\u002F04.validation-flow-control",{"title":158,"path":159,"stem":160},"The Modern .NET Host (Microsoft.Extensions)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fmodern-dotnet-host","01.csharp\u002F04.architecture-best-practices\u002F05.modern-dotnet-host",{"title":162,"path":163,"stem":164},"Data Mapper: Repository та DAO патерни (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part1","01.csharp\u002F04.architecture-best-practices\u002F06.data-mapper-part1",{"title":166,"path":167,"stem":168},"Data Mapper: Repository та DAO патерни (Частина 2)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part2","01.csharp\u002F04.architecture-best-practices\u002F07.data-mapper-part2",{"title":170,"icon":132,"path":171,"stem":172,"children":173,"page":59},"Di Ioc","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc",[174,178,182,186,190,194,198],{"title":175,"path":176,"stem":177},"Проблема залежностей та Інверсія Контролю","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fthe-dependency-problem","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F01.the-dependency-problem",{"title":179,"path":180,"stem":181},"Будуємо власний Service Container","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fbuild-your-own-container","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F02.build-your-own-container",{"title":183,"path":184,"stem":185},"Service Locator: Паттерн та Анти-паттерн","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-locator-pattern","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F03.service-locator-pattern",{"title":187,"path":188,"stem":189},"Паттерни Dependency Injection","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdependency-injection-patterns","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F04.dependency-injection-patterns",{"title":191,"path":192,"stem":193},"Microsoft DI: IServiceCollection та IServiceProvider","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fmicrosoft-di-deep-dive","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F05.microsoft-di-deep-dive",{"title":195,"path":196,"stem":197},"Service Lifetimes та Scopes","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-lifetimes-and-scopes","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F06.service-lifetimes-and-scopes",{"title":199,"path":200,"stem":201},"DI Анти-паттерни та Найкращі Практики","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdi-anti-patterns-and-best-practices","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F07.di-anti-patterns-and-best-practices",{"title":203,"icon":132,"path":204,"stem":205,"children":206,"page":59},"Standard Library","\u002Fcsharp\u002Fstandard-library","01.csharp\u002F05.standard-library",[207,211,215],{"title":208,"path":209,"stem":210},"Collections (Колекції)","\u002Fcsharp\u002Fstandard-library\u002Fcollections","01.csharp\u002F05.standard-library\u002F01.collections",{"title":212,"path":213,"stem":214},"High Performance Types (Високопродуктивні Типи)","\u002Fcsharp\u002Fstandard-library\u002Fhigh-performance-types","01.csharp\u002F05.standard-library\u002F02.high-performance-types",{"title":216,"path":217,"stem":218},"LINQ (Language Integrated Query)","\u002Fcsharp\u002Fstandard-library\u002Flinq","01.csharp\u002F05.standard-library\u002F03.linq",{"title":220,"icon":221,"path":222,"stem":223,"children":224,"page":59},"System Internals Concurrency","i-lucide-server","\u002Fcsharp\u002Fsystem-internals-concurrency","01.csharp\u002F06.system-internals-concurrency",[225,229,233,237,241,245,249],{"title":226,"path":227,"stem":228},"Memory Management","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmemory-management","01.csharp\u002F06.system-internals-concurrency\u002F01.memory-management",{"title":230,"path":231,"stem":232},"Reflection API: System.Type та Метадані","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Freflection-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F02.reflection-fundamentals",{"title":234,"path":235,"stem":236},"Attributes та Dynamic Language Runtime","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fattributes-dynamic","01.csharp\u002F06.system-internals-concurrency\u002F03.attributes-dynamic",{"title":238,"path":239,"stem":240},"Expression Trees: Швидка Альтернатива Рефлексії","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fexpression-trees-compiled","01.csharp\u002F06.system-internals-concurrency\u002F04.expression-trees-compiled",{"title":242,"path":243,"stem":244},"Source Generators: Compile-Time Code Generation","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsource-generators","01.csharp\u002F06.system-internals-concurrency\u002F05.source-generators",{"title":246,"path":247,"stem":248},"Multithreading Fundamentals","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmultithreading-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F06.multithreading-fundamentals",{"title":250,"path":251,"stem":252},"Synchronization Primitives","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsynchronization-primitives","01.csharp\u002F06.system-internals-concurrency\u002F07.synchronization-primitives",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":59},"System Programming Windows","i-lucide-cpu","\u002Fcsharp\u002Fsystem-programming-windows","01.csharp\u002F07.system-programming-windows",[259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375],{"title":260,"path":261,"stem":262},"Як Працює Операційна Система","\u002Fcsharp\u002Fsystem-programming-windows\u002Fhow-os-works","01.csharp\u002F07.system-programming-windows\u002F01.how-os-works",{"title":264,"path":265,"stem":266},"Процеси в .NET — API та Запуск","\u002Fcsharp\u002Fsystem-programming-windows\u002Fprocesses-in-dotnet","01.csharp\u002F07.system-programming-windows\u002F02.processes-in-dotnet",{"title":268,"path":269,"stem":270},"Процеси в .NET — IPC та Міжпроцесна Комунікація","\u002Fcsharp\u002Fsystem-programming-windows\u002F02a.processes-ipc","01.csharp\u002F07.system-programming-windows\u002F02a.processes-ipc",{"title":272,"path":273,"stem":274},"Application Domains та Збірки — AppDomain і AssemblyLoadContext","\u002Fcsharp\u002Fsystem-programming-windows\u002Fappdomains-assemblies","01.csharp\u002F07.system-programming-windows\u002F03.appdomains-assemblies",{"title":276,"path":277,"stem":278},"Application Domains та Збірки — Plug-in Система з Hot-Reload","\u002Fcsharp\u002Fsystem-programming-windows\u002F03a.appdomains-plugin-system","01.csharp\u002F07.system-programming-windows\u002F03a.appdomains-plugin-system",{"title":280,"path":281,"stem":282},"Потоки — Основи та API Thread","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-fundamentals","01.csharp\u002F07.system-programming-windows\u002F04.thread-fundamentals",{"title":284,"path":285,"stem":286},"Потоки — Lifecycle, Пріоритети та Безпечне Завершення","\u002Fcsharp\u002Fsystem-programming-windows\u002F04a.thread-lifecycle-priorities","01.csharp\u002F07.system-programming-windows\u002F04a.thread-lifecycle-priorities",{"title":288,"path":289,"stem":290},"Проблеми Спільного Стану — Race Condition та Data Race","\u002Fcsharp\u002Fsystem-programming-windows\u002Fshared-state-problems","01.csharp\u002F07.system-programming-windows\u002F05.shared-state-problems",{"title":292,"path":293,"stem":294},"Проблеми Спільного Стану — Memory Model та volatile","\u002Fcsharp\u002Fsystem-programming-windows\u002F05a.shared-state-memory-model","01.csharp\u002F07.system-programming-windows\u002F05a.shared-state-memory-model",{"title":296,"path":297,"stem":298},"Синхронізація — Monitor, lock та еволюція примітивів","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-fundamentals","01.csharp\u002F07.system-programming-windows\u002F06.synchronization-fundamentals",{"title":300,"path":301,"stem":302},"Синхронізація — Наскрізний Приклад та Deadlock Detection","\u002Fcsharp\u002Fsystem-programming-windows\u002F06a.synchronization-walkthrough","01.csharp\u002F07.system-programming-windows\u002F06a.synchronization-walkthrough",{"title":304,"path":305,"stem":306},"Синхронізація — Mutex, Semaphore та Event-Based Primitives","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-advanced","01.csharp\u002F07.system-programming-windows\u002F07.synchronization-advanced",{"title":308,"path":309,"stem":310},"Синхронізація — Interlocked, Volatile та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002F07a.synchronization-advanced-walkthrough","01.csharp\u002F07.system-programming-windows\u002F07a.synchronization-advanced-walkthrough",{"title":312,"path":313,"stem":314},"Interlocked, CAS та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002Finterlocked-cas-lockfree","01.csharp\u002F07.system-programming-windows\u002F08.interlocked-cas-lockfree",{"title":316,"path":317,"stem":318},"Volatile, Memory Model та Spinning","\u002Fcsharp\u002Fsystem-programming-windows\u002F08a.volatile-memory-model","01.csharp\u002F07.system-programming-windows\u002F08a.volatile-memory-model",{"title":320,"path":321,"stem":322},"ThreadPool — Пул Потоків для Ефективного Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-pool","01.csharp\u002F07.system-programming-windows\u002F09.thread-pool",{"title":324,"path":325,"stem":326},"ThreadPool — Просунуті Сценарії та Внутрішня Будова","\u002Fcsharp\u002Fsystem-programming-windows\u002F09a.thread-pool-advanced","01.csharp\u002F07.system-programming-windows\u002F09a.thread-pool-advanced",{"title":328,"path":329,"stem":330},"Concurrent та Immutable Collections","\u002Fcsharp\u002Fsystem-programming-windows\u002Fconcurrent-collections","01.csharp\u002F07.system-programming-windows\u002F10.concurrent-collections",{"title":332,"path":333,"stem":334},"TPL, Task та Композиція — Від Thread до Task","\u002Fcsharp\u002Fsystem-programming-windows\u002Ftpl-parallel-plinq","01.csharp\u002F07.system-programming-windows\u002F11.tpl-parallel-plinq",{"title":336,"path":337,"stem":338},"Parallel Class та PLINQ — Data Parallelism","\u002Fcsharp\u002Fsystem-programming-windows\u002F11a.tpl-parallel-plinq-advanced","01.csharp\u002F07.system-programming-windows\u002F11a.tpl-parallel-plinq-advanced",{"title":340,"path":341,"stem":342},"Async\u002FAwait — Фундамент Асинхронного Програмування","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-fundamentals","01.csharp\u002F07.system-programming-windows\u002F12.async-fundamentals",{"title":344,"path":345,"stem":346},"SynchronizationContext та ConfigureAwait — Контекст Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-context-configureawait","01.csharp\u002F07.system-programming-windows\u002F13.async-context-configureawait",{"title":348,"path":349,"stem":350},"Async — Просунуті Паттерни","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-advanced","01.csharp\u002F07.system-programming-windows\u002F14.async-advanced",{"title":352,"path":353,"stem":354},"System.Threading.Channels — Async Producer-Consumer","\u002Fcsharp\u002Fsystem-programming-windows\u002Fchannels","01.csharp\u002F07.system-programming-windows\u002F15.channels",{"title":356,"path":357,"stem":358},"Асинхронна Синхронізація","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-synchronization","01.csharp\u002F07.system-programming-windows\u002F16.async-synchronization",{"title":360,"path":361,"stem":362},"Unsafe Code та Вказівники","\u002Fcsharp\u002Fsystem-programming-windows\u002Funsafe-code","01.csharp\u002F07.system-programming-windows\u002F17.unsafe-code",{"title":364,"path":365,"stem":366},"P\u002FInvoke та Windows API — Міст між .NET та Native Code","\u002Fcsharp\u002Fsystem-programming-windows\u002Fpinvoke-winapi","01.csharp\u002F07.system-programming-windows\u002F18.pinvoke-winapi",{"title":368,"path":369,"stem":370},"Реєстр Windows — Центральна База Конфігурації Системи","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-registry","01.csharp\u002F07.system-programming-windows\u002F19.windows-registry",{"title":372,"path":373,"stem":374},"Windows Hooks, Hotkeys та Services — Глибока Інтеграція з ОС","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-hooks-services","01.csharp\u002F07.system-programming-windows\u002F20.windows-hooks-services",{"title":376,"path":377,"stem":378},"Системне Програмування C# (Windows) — 07.system-programming-windows","\u002Fcsharp\u002Fsystem-programming-windows\u002Fimplementation_plan","01.csharp\u002F07.system-programming-windows\u002Fimplementation_plan",{"title":380,"icon":132,"path":381,"stem":382,"children":383,"page":59},"Io","\u002Fcsharp\u002Fio","01.csharp\u002F08.io",[384,388,392,396,400],{"title":385,"path":386,"stem":387},"8.1.1. Основи роботи з файловою системою","\u002Fcsharp\u002Fio\u002Ffile-system-basics","01.csharp\u002F08.io\u002F01.file-system-basics",{"title":389,"path":390,"stem":391},"8.1.2. Потоки (Streams) та Серіалізація Даних","\u002Fcsharp\u002Fio\u002Fstreams-serialization","01.csharp\u002F08.io\u002F02.streams-serialization",{"title":393,"path":394,"stem":395},"8.2.1. JSON Serialization з System.Text.Json","\u002Fcsharp\u002Fio\u002Fjson-serialization","01.csharp\u002F08.io\u002F03.json-serialization",{"title":397,"path":398,"stem":399},"8.2.2. XML Serialization та LINQ to XML","\u002Fcsharp\u002Fio\u002Fxml-serialization","01.csharp\u002F08.io\u002F04.xml-serialization",{"title":401,"path":402,"stem":403},"8.2.3. Binary Serialization: MessagePack та Protocol Buffers","\u002Fcsharp\u002Fio\u002Fbinary-serialization","01.csharp\u002F08.io\u002F05.binary-serialization",{"title":405,"icon":132,"path":406,"stem":407,"children":408,"page":59},"Ado Net","\u002Fcsharp\u002Fado-net","01.csharp\u002F09.ado-net",[409,413,417,421,425,429,433,437,441,445,449,453],{"title":410,"path":411,"stem":412},"9.1. Введення в ADO.NET","\u002Fcsharp\u002Fado-net\u002Fintroduction-to-adonet","01.csharp\u002F09.ado-net\u002F01.introduction-to-adonet",{"title":414,"path":415,"stem":416},"9.2. Клас DbConnection — з'єднання з базою даних","\u002Fcsharp\u002Fado-net\u002Fconnection","01.csharp\u002F09.ado-net\u002F02.connection",{"title":418,"path":419,"stem":420},"9.3. Клас DbCommand — виконання SQL-запитів","\u002Fcsharp\u002Fado-net\u002Fcommand-and-queries","01.csharp\u002F09.ado-net\u002F03.command-and-queries",{"title":422,"path":423,"stem":424},"9.4. Клас DbDataReader — ефективне читання даних","\u002Fcsharp\u002Fado-net\u002Fdatareader","01.csharp\u002F09.ado-net\u002F04.datareader",{"title":426,"path":427,"stem":428},"9.5. Параметризовані запити та захист від SQL Injection","\u002Fcsharp\u002Fado-net\u002Fparameters-and-sql-injection","01.csharp\u002F09.ado-net\u002F05.parameters-and-sql-injection",{"title":430,"path":431,"stem":432},"9.6. Транзакції в ADO.NET","\u002Fcsharp\u002Fado-net\u002Ftransactions","01.csharp\u002F09.ado-net\u002F06.transactions",{"title":434,"path":435,"stem":436},"9.7. DbProviderFactory — провайдер-незалежний код","\u002Fcsharp\u002Fado-net\u002Fprovider-factory","01.csharp\u002F09.ado-net\u002F07.provider-factory",{"title":438,"path":439,"stem":440},"9.8. Асинхронний доступ до даних","\u002Fcsharp\u002Fado-net\u002Fasync-data-access","01.csharp\u002F09.ado-net\u002F08.async-data-access",{"title":442,"path":443,"stem":444},"9.9. Від'єднаний режим: DataSet, DataTable, DataRow","\u002Fcsharp\u002Fado-net\u002Fdisconnected-mode-dataset","01.csharp\u002F09.ado-net\u002F09.disconnected-mode-dataset",{"title":446,"path":447,"stem":448},"9.10. DataAdapter — міст між DataSet та базою даних","\u002Fcsharp\u002Fado-net\u002Fdata-adapter","01.csharp\u002F09.ado-net\u002F10.data-adapter",{"title":450,"path":451,"stem":452},"9.11. Data Mapper та Repository: Архітектура доступу до даних","\u002Fcsharp\u002Fado-net\u002Fdata-mapper-repository","01.csharp\u002F09.ado-net\u002F11.data-mapper-repository",{"title":454,"path":455,"stem":456},"9.12. Identity Map, Unit of Work та Specification Pattern","\u002Fcsharp\u002Fado-net\u002Fadvanced-patterns","01.csharp\u002F09.ado-net\u002F12.advanced-patterns",{"title":458,"icon":255,"path":459,"stem":460,"children":461,"page":59},"Ef Core","\u002Fcsharp\u002Fef-core","01.csharp\u002F10.ef-core",[462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,532,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646],{"title":463,"path":464,"stem":465},"Що таке ORM? Від SQL до об'єктів","\u002Fcsharp\u002Fef-core\u002Fwhat-is-orm","01.csharp\u002F10.ef-core\u002F01.what-is-orm",{"title":467,"path":468,"stem":469},"Перший проєкт — від нуля до CRUD","\u002Fcsharp\u002Fef-core\u002Ffirst-project","01.csharp\u002F10.ef-core\u002F02.first-project",{"title":471,"path":472,"stem":473},"DbContext — Серце EF Core","\u002Fcsharp\u002Fef-core\u002Fdbcontext-deep-dive","01.csharp\u002F10.ef-core\u002F03.dbcontext-deep-dive",{"title":475,"path":476,"stem":477},"Провайдери баз даних — Архітектура та Вибір СУБД","\u002Fcsharp\u002Fef-core\u002Fdatabase-providers","01.csharp\u002F10.ef-core\u002F04.database-providers",{"title":479,"path":480,"stem":481},"Конвенції EF Core — Магія без конфігурації","\u002Fcsharp\u002Fef-core\u002Fconventions","01.csharp\u002F10.ef-core\u002F05.conventions",{"title":483,"path":484,"stem":485},"Fluent API та Data Annotations — Явна конфігурація моделі","\u002Fcsharp\u002Fef-core\u002Ffluent-api-vs-annotations","01.csharp\u002F10.ef-core\u002F06.fluent-api-vs-annotations",{"title":487,"path":488,"stem":489},"Зв'язки — One-to-One та One-to-Many","\u002Fcsharp\u002Fef-core\u002Frelationships-basics","01.csharp\u002F10.ef-core\u002F07.relationships-basics",{"title":491,"path":492,"stem":493},"Зв'язки Advanced — Many-to-Many та Складні Сценарії","\u002Fcsharp\u002Fef-core\u002Frelationships-advanced","01.csharp\u002F10.ef-core\u002F08.relationships-advanced",{"title":495,"path":496,"stem":497},"Властивості — Типи, Конвертери, Компаратори (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part1","01.csharp\u002F10.ef-core\u002F09.property-configuration-part1",{"title":499,"path":500,"stem":501},"Властивості — Value Comparers, Generators, Shadow Properties (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part2","01.csharp\u002F10.ef-core\u002F09.property-configuration-part2",{"title":503,"path":504,"stem":505},"Складні типи — Owned Types та Complex Types (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part1","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part1",{"title":507,"path":508,"stem":509},"Складні типи — Complex Types, Keyless Entities, Порівняння (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part2","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part2",{"title":511,"path":512,"stem":513},"JSON Columns — Складні дані у JSON (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part1","01.csharp\u002F10.ef-core\u002F11.json-columns-part1",{"title":515,"path":516,"stem":517},"JSON Columns — Value Comparers, Індекси, Провайдери (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part2","01.csharp\u002F10.ef-core\u002F11.json-columns-part2",{"title":519,"path":520,"stem":521},"Успадкування — Абстрактні класи та TPH (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finheritance-part1","01.csharp\u002F10.ef-core\u002F12.inheritance-part1",{"title":523,"path":524,"stem":525},"Успадкування — TPT, TPC та Порівняння Стратегій (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finheritance-part2","01.csharp\u002F10.ef-core\u002F12.inheritance-part2",{"title":527,"path":528,"stem":529,"children":530},"Індекси, Обмеження та Схема (Частина 1)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part1","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part1",[531],{"title":527,"path":528,"stem":529},{"title":533,"path":534,"stem":535,"children":536},"Індекси, Обмеження та Схема (Частина 2)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part2","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part2",[537],{"title":533,"path":534,"stem":535},{"title":539,"path":540,"stem":541},"Seed Data — Початкові Дані (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fseeding-part1","01.csharp\u002F10.ef-core\u002F14.seeding-part1",{"title":543,"path":544,"stem":545},"Seed Data — SQL-скрипти, Bogus та Стратегії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fseeding-part2","01.csharp\u002F10.ef-core\u002F14.seeding-part2",{"title":547,"path":548,"stem":549},"Global Query Filters — Глобальні Фільтри (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part1","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part1",{"title":551,"path":552,"stem":553},"Global Query Filters — Підводні камені та Інтеграція (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part2","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part2",{"title":555,"path":556,"stem":557},"LINQ-запити в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part1","01.csharp\u002F10.ef-core\u002F16.linq-queries-part1",{"title":559,"path":560,"stem":561},"LINQ-запити в EF Core (Частина 2)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part2","01.csharp\u002F10.ef-core\u002F16.linq-queries-part2",{"title":563,"path":564,"stem":565},"Завантаження Пов'язаних Даних (Частина 1)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part1","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part1",{"title":567,"path":568,"stem":569},"Завантаження Пов'язаних Даних (Частина 2)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part2","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part2",{"title":571,"path":572,"stem":573},"Raw SQL, Views та Stored Procedures (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part1","01.csharp\u002F10.ef-core\u002F18.raw-sql-part1",{"title":575,"path":576,"stem":577},"Raw SQL — Stored Procedures, DbFunction та Bulk Operations (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part2","01.csharp\u002F10.ef-core\u002F18.raw-sql-part2",{"title":579,"path":580,"stem":581},"Продвинуті Запити — Compiled Queries, Bulk та Оптимізація (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part1","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part1",{"title":583,"path":584,"stem":585},"Продвинуті Запити — Query Tags, Bulk та Interceptors (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part2","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part2",{"title":587,"path":588,"stem":589},"Change Tracker — Відстеження Змін (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part1","01.csharp\u002F10.ef-core\u002F20.change-tracking-part1",{"title":591,"path":592,"stem":593},"Change Tracker — Графи Об'єктів та Disconnected (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part2","01.csharp\u002F10.ef-core\u002F20.change-tracking-part2",{"title":595,"path":596,"stem":597},"Збереження Даних та Транзакції (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part1","01.csharp\u002F10.ef-core\u002F21.saving-data-part1",{"title":599,"path":600,"stem":601},"Збереження Даних — Concurrency та Outbox (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part2","01.csharp\u002F10.ef-core\u002F21.saving-data-part2",{"title":603,"path":604,"stem":605},"Конкурентність та Блокування (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part1","01.csharp\u002F10.ef-core\u002F22.concurrency-part1",{"title":607,"path":608,"stem":609},"Конкурентність — Дедлоки та Queue Processing (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part2","01.csharp\u002F10.ef-core\u002F22.concurrency-part2",{"title":611,"path":612,"stem":613},"Міграції в EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part1","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part1",{"title":615,"path":616,"stem":617},"Міграції в EF Core — Основи (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part2","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part2",{"title":619,"path":620,"stem":621},"Міграції — Просунуті Сценарії (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part1","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part1",{"title":623,"path":624,"stem":625},"Міграції — Просунуті Сценарії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part2","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part2",{"title":627,"path":628,"stem":629},"Управління Схемою та Database-First (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part1","01.csharp\u002F10.ef-core\u002F25.schema-management-part1",{"title":631,"path":632,"stem":633},"Управління Схемою та Database-First (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part2","01.csharp\u002F10.ef-core\u002F25.schema-management-part2",{"title":635,"path":636,"stem":637},"Продуктивність EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fperformance-fundamentals-part1","01.csharp\u002F10.ef-core\u002F26.performance-fundamentals-part1",{"title":639,"path":640,"stem":641},"Interceptors в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part1","01.csharp\u002F10.ef-core\u002F29.interceptors-part1",{"title":643,"path":644,"stem":645},"Interceptors в EF Core — Connection, Transaction та Materialization (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part2","01.csharp\u002F10.ef-core\u002F29.interceptors-part2",{"title":647,"path":648,"stem":649},"План вивчення Entity Framework Core — Повний курс","\u002Fcsharp\u002Fef-core\u002Fimplementation_plan","01.csharp\u002F10.ef-core\u002Fimplementation_plan",{"title":651,"icon":652,"path":653,"stem":654,"children":655,"page":59},"ASP.NET","i-devicon-dotnetcore","\u002Fcsharp\u002Faspnet","01.csharp\u002F11.aspnet",[656,730,791,869,927,941,967,1057,1111,1182,1212,1289,1346],{"title":657,"icon":658,"path":659,"stem":660,"children":661,"page":59},"Minimal API","i-lucide-network","\u002Fcsharp\u002Faspnet\u002Fminimal-api","01.csharp\u002F11.aspnet\u002F01.minimal-api",[662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726],{"title":663,"path":664,"stem":665},"Вступ до ASP.NET та еволюція фреймворку","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fintroduction","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F01.introduction",{"title":667,"path":668,"stem":669},"Перший додаток на ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Ffirst-application","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F02.first-application",{"title":671,"path":672,"stem":673},"WebApplication, Builder та Dependency Injection","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fwebapplication-builder","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F03.webapplication-builder",{"title":675,"path":676,"stem":677},"Конвеєр запитів та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frequest-pipeline-middleware","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F04.request-pipeline-middleware",{"title":679,"path":680,"stem":681},"Маршрутизація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F05.routing-basics",{"title":683,"path":684,"stem":685},"Маршрутизація в ASP.NET Core: Розширені можливості","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F06.routing-advanced",{"title":687,"path":688,"stem":689},"Статичні файли в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-files","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F07.static-files",{"title":691,"path":692,"stem":693},"Статичні Активи: MapStaticAssets (ASP.NET Core 9.0)","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-assets","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F08.static-assets",{"title":695,"path":696,"stem":697},"Конфігурація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-fundamentals","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F09.configuration-fundamentals",{"title":699,"path":700,"stem":701},"Конфігурація: Паттерн Options","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-options","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F10.configuration-options",{"title":703,"path":704,"stem":705},"Логування в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F11.logging-basics",{"title":707,"path":708,"stem":709},"Логування: Serilog та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F12.logging-advanced",{"title":711,"path":712,"stem":713},"Управління станом: HttpContext.Items та Cookies","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstate-management","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F13.state-management",{"title":715,"path":716,"stem":717},"Стан сесії: Sessions","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fsession-state","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F14.session-state",{"title":719,"path":720,"stem":721},"Структура проєкту: від хаосу до архітектури","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fproject-structure","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F15.project-structure",{"title":723,"path":724,"stem":725},"Scalar у Minimal API: повний проєкт і Fluent OpenAPI","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fscalar-openapi-fluent","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F16.scalar-openapi-fluent",{"title":727,"path":728,"stem":729},"Swagger \u002F Swashbuckle у Minimal API: окремий класичний шлях","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fswagger-swashbuckle","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F17.swagger-swashbuckle",{"title":731,"icon":658,"path":732,"stem":733,"children":734,"page":59},"API","\u002Fcsharp\u002Faspnet\u002Fapi","01.csharp\u002F11.aspnet\u002F02.api",[735,739,743,747,751,755,759,763,767,771,775,779,783,787],{"title":736,"path":737,"stem":738},"Що таке API. Клієнт-серверна архітектура","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fwhat-is-api","01.csharp\u002F11.aspnet\u002F02.api\u002F01.what-is-api",{"title":740,"path":741,"stem":742},"Формати даних: JSON, XML, TOML та бінарні формати","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fdata-formats","01.csharp\u002F11.aspnet\u002F02.api\u002F02.data-formats",{"title":744,"path":745,"stem":746},"Парадигми API та концепція REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-paradigms-rest","01.csharp\u002F11.aspnet\u002F02.api\u002F03.api-paradigms-rest",{"title":748,"path":749,"stem":750},"HTTP-методи, статус-коди та заголовки","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fhttp-methods-status-codes","01.csharp\u002F11.aspnet\u002F02.api\u002F04.http-methods-status-codes",{"title":752,"path":753,"stem":754},"Організація HTTP API за принципами REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Frest-organizing","01.csharp\u002F11.aspnet\u002F02.api\u002F05.rest-organizing",{"title":756,"path":757,"stem":758},"Номенклатура URL та CRUD-операції","\u002Fcsharp\u002Faspnet\u002Fapi\u002Furl-nomenclature-crud","01.csharp\u002F11.aspnet\u002F02.api\u002F06.url-nomenclature-crud",{"title":760,"path":761,"stem":762},"Правила дизайну: іменування та стандарти","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-naming","01.csharp\u002F11.aspnet\u002F02.api\u002F07.api-design-naming",{"title":764,"path":765,"stem":766},"Валідація, ліміти та обробка помилок","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-validation","01.csharp\u002F11.aspnet\u002F02.api\u002F08.api-design-validation",{"title":768,"path":769,"stem":770},"Обробка помилок у Minimal API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Ferror-handling-http","01.csharp\u002F11.aspnet\u002F02.api\u002F09.error-handling-http",{"title":772,"path":773,"stem":774},"Ідемпотентність та синхронізація стану","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fidempotency-sync","01.csharp\u002F11.aspnet\u002F02.api\u002F10.idempotency-sync",{"title":776,"path":777,"stem":778},"Пагінація та організація списків","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fpagination-lists","01.csharp\u002F11.aspnet\u002F02.api\u002F11.pagination-lists",{"title":780,"path":781,"stem":782},"Безпека API, кешування та інтернаціоналізація","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fsecurity-auth","01.csharp\u002F11.aspnet\u002F02.api\u002F12.security-auth",{"title":784,"path":785,"stem":786},"Процес проєктування API та документування","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-process","01.csharp\u002F11.aspnet\u002F02.api\u002F13.api-design-process",{"title":788,"path":789,"stem":790},"OpenAPI: контракт, специфікація та документація API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fopenapi","01.csharp\u002F11.aspnet\u002F02.api\u002F14.openapi",{"title":792,"icon":793,"path":794,"stem":795,"children":796,"page":59},"Auth","i-lucide-shield-check","\u002Fcsharp\u002Faspnet\u002Fauth","01.csharp\u002F11.aspnet\u002F03.auth",[797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865],{"title":798,"path":799,"stem":800},"Основи аутентифікації та авторизації","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauth-fundamentals","01.csharp\u002F11.aspnet\u002F03.auth\u002F01.auth-fundamentals",{"title":802,"path":803,"stem":804},"JWT-аутентифікація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fjwt-authentication","01.csharp\u002F11.aspnet\u002F03.auth\u002F02.jwt-authentication",{"title":806,"path":807,"stem":808},"Авторизація: ролі, політики та resource-based доступ","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauthorization-policies","01.csharp\u002F11.aspnet\u002F03.auth\u002F03.authorization-policies",{"title":810,"path":811,"stem":812},"Cookie-аутентифікація та ASP.NET Core Identity","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcookie-auth-identity","01.csharp\u002F11.aspnet\u002F03.auth\u002F04.cookie-auth-identity",{"title":814,"path":815,"stem":816},"JWT + Refresh Tokens (HttpOnly Cookie)","\u002Fcsharp\u002Faspnet\u002Fauth\u002F04b.identity-auth-jwt","01.csharp\u002F11.aspnet\u002F03.auth\u002F04b.identity-auth-jwt",{"title":818,"path":819,"stem":820},"Identity: Підтвердження Email та Скидання Пароля","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-email-confirmation","01.csharp\u002F11.aspnet\u002F03.auth\u002F05.identity-email-confirmation",{"title":822,"path":823,"stem":824},"Identity: Двофакторна Аутентифікація (2FA)","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-two-factor","01.csharp\u002F11.aspnet\u002F03.auth\u002F06.identity-two-factor",{"title":826,"path":827,"stem":828},"Identity: Внутрішня Архітектура та Кастомізація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-internals","01.csharp\u002F11.aspnet\u002F03.auth\u002F07.identity-internals",{"title":830,"path":831,"stem":832},"OAuth 2.0 та зовнішні провайдери","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-external-providers","01.csharp\u002F11.aspnet\u002F03.auth\u002F08.oauth-external-providers",{"title":834,"path":835,"stem":836},"Безпека на практиці: CORS, HTTPS та захист від атак","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fsecurity-hardening","01.csharp\u002F11.aspnet\u002F03.auth\u002F09.security-hardening",{"title":838,"path":839,"stem":840},"Теорія OAuth 2.0: Поняття, Аналогії та Флоу","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-theory","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oauth-theory",{"title":842,"path":843,"stem":844},"OIDC, OAuth 2.0 та Keycloak в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foidc-keycloak","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oidc-keycloak",{"title":846,"path":847,"stem":848},"API Keys аутентифікація в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fapi-keys","01.csharp\u002F11.aspnet\u002F03.auth\u002F11.api-keys",{"title":850,"path":851,"stem":852},"Rate Limiting та Throttling в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frate-limiting","01.csharp\u002F11.aspnet\u002F03.auth\u002F12.rate-limiting",{"title":854,"path":855,"stem":856},"Refresh Token Rotation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frefresh-token-rotation","01.csharp\u002F11.aspnet\u002F03.auth\u002F13.refresh-token-rotation",{"title":858,"path":859,"stem":860},"Certificate Authentication та mTLS в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcertificate-auth","01.csharp\u002F11.aspnet\u002F03.auth\u002F14.certificate-auth",{"title":862,"path":863,"stem":864},"RBAC, ABAC та ReBAC в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frbac-abac-rebac","01.csharp\u002F11.aspnet\u002F03.auth\u002F15.rbac-abac-rebac",{"title":866,"path":867,"stem":868},"Multi-tenancy та ізоляція даних в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fmulti-tenancy","01.csharp\u002F11.aspnet\u002F03.auth\u002F16.multi-tenancy",{"title":870,"icon":871,"path":872,"stem":873,"children":874,"page":59},"Нотифікації","i-lucide-bell","\u002Fcsharp\u002Faspnet\u002Fnotifications","01.csharp\u002F11.aspnet\u002F04.notifications",[875,879,883,887,891,895,899,903,907,911,915,919,923],{"title":876,"path":877,"stem":878},"In-App нотифікації через базу даних","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fin-app-database-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F01.in-app-database-notifications",{"title":880,"path":881,"stem":882},"Polling: Регулярний запит оновлень","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fpolling","01.csharp\u002F11.aspnet\u002F04.notifications\u002F02.polling",{"title":884,"path":885,"stem":886},"Server-Sent Events: Однострімовий push від сервера","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fserver-sent-events","01.csharp\u002F11.aspnet\u002F04.notifications\u002F03.server-sent-events",{"title":888,"path":889,"stem":890},"WebSockets: Двостороннє з'єднання в реальному часі","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fwebsockets","01.csharp\u002F11.aspnet\u002F04.notifications\u002F04.websockets",{"title":892,"path":893,"stem":894},"SignalR: Абстракція над транспортами реального часу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fsignalr","01.csharp\u002F11.aspnet\u002F04.notifications\u002F05.signalr",{"title":896,"path":897,"stem":898},"Background Services: Фонові задачі в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fbackground-services","01.csharp\u002F11.aspnet\u002F04.notifications\u002F06.background-services",{"title":900,"path":901,"stem":902},"Web Push нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fweb-push","01.csharp\u002F11.aspnet\u002F04.notifications\u002F07.web-push",{"title":904,"path":905,"stem":906},"Email нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Femail-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F08.email-notifications",{"title":908,"path":909,"stem":910},"Порівняння підходів: Як вибрати правильну технологію нотифікацій","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fchoosing-the-right-approach","01.csharp\u002F11.aspnet\u002F04.notifications\u002F09.choosing-the-right-approach",{"title":912,"path":913,"stem":914},"Hangfire: Надійне планування фонових задач","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire","01.csharp\u002F11.aspnet\u002F04.notifications\u002F10.hangfire",{"title":916,"path":917,"stem":918},"Практика: Конвертація зображень у WebP через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-image-webp","01.csharp\u002F11.aspnet\u002F04.notifications\u002F11.hangfire-image-webp",{"title":920,"path":921,"stem":922},"Практика: Підготовка відео до HLS-стрімінгу через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-video-hls","01.csharp\u002F11.aspnet\u002F04.notifications\u002F12.hangfire-video-hls",{"title":924,"path":925,"stem":926},"Telegram-нотифікації: від одного повідомлення до масових розсилок і мульти-канального підходу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Ftelegram-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F13.telegram-notifications",{"title":928,"icon":929,"path":930,"stem":931,"children":932,"page":59},"Інтернаціоналізація","i-lucide-languages","\u002Fcsharp\u002Faspnet\u002Fi18n","01.csharp\u002F11.aspnet\u002F05.i18n",[933,937],{"title":934,"path":935,"stem":936},"Інтернаціоналізація (i18n) у Minimal API: від A до Я","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Finternationalization","01.csharp\u002F11.aspnet\u002F05.i18n\u002F01.internationalization",{"title":938,"path":939,"stem":940},"Humanizer: людиномовні рядки у .NET","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Fhumanizer","01.csharp\u002F11.aspnet\u002F05.i18n\u002F02.humanizer",{"title":942,"icon":943,"path":944,"stem":945,"children":946,"page":59},"Кешування","i-lucide-layers","\u002Fcsharp\u002Faspnet\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching",[947,951,955,959,963],{"title":948,"path":949,"stem":950},"Огляд кешування: чотири рівні і коли що обирати","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching\u002F01.caching",{"title":952,"path":953,"stem":954},"IMemoryCache: кеш в оперативній пам'яті","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fmemory-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F02.memory-cache",{"title":956,"path":957,"stem":958},"IDistributedCache і Redis: розподілений кеш","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fdistributed-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F03.distributed-cache",{"title":960,"path":961,"stem":962},"Response Cache: HTTP-кешування через Cache-Control","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fresponse-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F04.response-cache",{"title":964,"path":965,"stem":966},"Output Cache: серверний кеш HTTP-відповідей (.NET 7+)","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Foutput-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F05.output-cache",{"title":968,"icon":969,"path":970,"stem":971,"children":972,"page":59},"Тестування","i-lucide-test-tube","\u002Fcsharp\u002Faspnet\u002Ftesting","01.csharp\u002F11.aspnet\u002F07.testing",[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049,1053],{"title":974,"path":975,"stem":976},"Що таке тестування? Від інтуїції до науки","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-is-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F01.what-is-testing",{"title":978,"path":979,"stem":980},"Піраміда тестування — Стратегія, а не Догма","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-pyramid","01.csharp\u002F11.aspnet\u002F07.testing\u002F02.testing-pyramid",{"title":982,"path":983,"stem":984},"Дві Школи Тестування — Лондон проти Детройту","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-schools","01.csharp\u002F11.aspnet\u002F07.testing\u002F03.testing-schools",{"title":986,"path":987,"stem":988},"TDD та BDD — Тести як Дизайн-інструмент","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftdd-and-bdd","01.csharp\u002F11.aspnet\u002F07.testing\u002F04.tdd-and-bdd",{"title":990,"path":991,"stem":992},"Що саме тестувати — Техніки аналізу та Циклomatична складність","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-to-test","01.csharp\u002F11.aspnet\u002F07.testing\u002F05.what-to-test",{"title":994,"path":995,"stem":996},"Тестові Фреймворки — Навіщо вони і що всередині","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftest-frameworks","01.csharp\u002F11.aspnet\u002F07.testing\u002F06.test-frameworks",{"title":998,"path":999,"stem":1000},"xUnit — Факти, Теорії та Lifecycle тестів","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-basics","01.csharp\u002F11.aspnet\u002F07.testing\u002F07.xunit-basics",{"title":1002,"path":1003,"stem":1004},"xUnit Advanced — Fixtures, Кастомізація та Розширення","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F08.xunit-advanced",{"title":1006,"path":1007,"stem":1008},"Moq — Глибоке занурення в мокування","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fmocking-with-moq","01.csharp\u002F11.aspnet\u002F07.testing\u002F09.mocking-with-moq",{"title":1010,"path":1011,"stem":1012},"Тестування Баз Даних — EF Core, SQLite та Testcontainers","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fdatabase-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F10.database-testing",{"title":1014,"path":1015,"stem":1016},"Integration Testing — Частина 1 [Теорія та WebApplicationFactory]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F11.integration-testing",{"title":1018,"path":1019,"stem":1020},"Інтеграційне тестування — Практика","\u002Fcsharp\u002Faspnet\u002Ftesting\u002F11a.integration-testing-practice","01.csharp\u002F11.aspnet\u002F07.testing\u002F11a.integration-testing-practice",{"title":1022,"path":1023,"stem":1024},"Integration Testing — Частина 2 [Просунуті Сценарії та Testcontainers]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F12.integration-testing-advanced",{"title":1026,"path":1027,"stem":1028},"Професійний Postman: Колекції, Змінні та GitHub Інтеграція","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fpostman-professional","01.csharp\u002F11.aspnet\u002F07.testing\u002F13.postman-professional",{"title":1030,"path":1031,"stem":1032},"HttpClient у Тестах Частина 1: Архітектура та MockHttpMessageHandler","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fhttpclient-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F14.httpclient-testing",{"title":1034,"path":1035,"stem":1036},"HttpClient у Тестах Частина 2: WireMock.Net та Resilience","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwiremock-net","01.csharp\u002F11.aspnet\u002F07.testing\u002F15.wiremock-net",{"title":1038,"path":1039,"stem":1040},"Патерни та Анти-патерни Тестування: Test Smells","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-patterns","01.csharp\u002F11.aspnet\u002F07.testing\u002F16.testing-patterns",{"title":1042,"path":1043,"stem":1044},"Просунуті інструменти: Time, Snapshots та Властивості","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fadvanced-testing-tools","01.csharp\u002F11.aspnet\u002F07.testing\u002F17.advanced-testing-tools",{"title":1046,"path":1047,"stem":1048},"Тестування Архітектури з NetArchTest","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Farchitecture-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F18.architecture-testing",{"title":1050,"path":1051,"stem":1052},"Тестування Продуктивності: BenchmarkDotNet, NBomber та k6","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fperformance-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F19.performance-testing",{"title":1054,"path":1055,"stem":1056},"Залишок плану для курсу \"Тестування ASP.NET Minimal API\"","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fremaining_plan","01.csharp\u002F11.aspnet\u002F07.testing\u002Fremaining_plan",{"title":1058,"icon":1059,"path":1060,"stem":1061,"children":1062,"page":59},"Платежі","i-lucide-credit-card","\u002Fcsharp\u002Faspnet\u002Fpayments","01.csharp\u002F11.aspnet\u002F08.payments",[1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107],{"title":1064,"path":1065,"stem":1066},"Основи платіжної інфраструктури","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-fundamentals","01.csharp\u002F11.aspnet\u002F08.payments\u002F01.payment-fundamentals",{"title":1068,"path":1069,"stem":1070},"Методи оплати в Україні","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-methods-ukraine","01.csharp\u002F11.aspnet\u002F08.payments\u002F02.payment-methods-ukraine",{"title":1072,"path":1073,"stem":1074},"PCI DSS та безпека платежів","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpci-dss-security","01.csharp\u002F11.aspnet\u002F08.payments\u002F03.pci-dss-security",{"title":1076,"path":1077,"stem":1078},"Архітектура платіжної підсистеми","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-architecture","01.csharp\u002F11.aspnet\u002F08.payments\u002F04.payment-architecture",{"title":1080,"path":1081,"stem":1082},"Інтеграція LiqPay (ПриватБанк)","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fliqpay-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F05.liqpay-integration",{"title":1084,"path":1085,"stem":1086},"Інтеграція Monobank Acquiring API","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fmonobank-acquiring","01.csharp\u002F11.aspnet\u002F08.payments\u002F06.monobank-acquiring",{"title":1088,"path":1089,"stem":1090},"Інтеграція Stripe","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fstripe-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F07.stripe-integration",{"title":1092,"path":1093,"stem":1094},"Webhooks — глибоке занурення","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fwebhooks-deep-dive","01.csharp\u002F11.aspnet\u002F08.payments\u002F08.webhooks-deep-dive",{"title":1096,"path":1097,"stem":1098},"Підписки та рекурентні платежі","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fsubscriptions-recurring","01.csharp\u002F11.aspnet\u002F08.payments\u002F09.subscriptions-recurring",{"title":1100,"path":1101,"stem":1102},"Повернення коштів та диспути","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Frefunds-disputes","01.csharp\u002F11.aspnet\u002F08.payments\u002F10.refunds-disputes",{"title":1104,"path":1105,"stem":1106},"Тестування платіжних інтеграцій","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Ftesting-payments","01.csharp\u002F11.aspnet\u002F08.payments\u002F11.testing-payments",{"title":1108,"path":1109,"stem":1110},"Чекліст виходу в Production","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fproduction-checklist","01.csharp\u002F11.aspnet\u002F08.payments\u002F12.production-checklist",{"title":1112,"icon":1113,"items":1114,"path":1127,"stem":1128,"children":1129,"page":59},"Популярні бібліотеки","lucide:box",[1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],"01.fluent-validation","02.mapster","03.erroror-result-pattern","04.serilog","05.mediatr","06.polly","07.health-checks","08.feature-management","09.fluent-email","10.quest-pdf","11.bogus","12.humanizer-guard","\u002Fcsharp\u002Faspnet\u002Flibraries","01.csharp\u002F11.aspnet\u002F09.libraries",[1130,1134,1138,1142,1146,1150,1154,1158,1162,1166,1170,1174,1178],{"title":1131,"path":1132,"stem":1133},"Валідація з FluentValidation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-validation","01.csharp\u002F11.aspnet\u002F09.libraries\u002F01.fluent-validation",{"title":1135,"path":1136,"stem":1137},"Маппінг об","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmapster","01.csharp\u002F11.aspnet\u002F09.libraries\u002F02.mapster",{"title":1139,"path":1140,"stem":1141},"Обробка помилок з ErrorOr та Result Pattern в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ferroror-result-pattern","01.csharp\u002F11.aspnet\u002F09.libraries\u002F03.erroror-result-pattern",{"title":1143,"path":1144,"stem":1145},"Структуроване логування з Serilog в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fserilog","01.csharp\u002F11.aspnet\u002F09.libraries\u002F04.serilog",{"title":1147,"path":1148,"stem":1149},"CQRS та Mediator з MediatR в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmediatr","01.csharp\u002F11.aspnet\u002F09.libraries\u002F05.mediatr",{"title":1151,"path":1152,"stem":1153},"Відмовостійкість з Polly в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fpolly","01.csharp\u002F11.aspnet\u002F09.libraries\u002F06.polly",{"title":1155,"path":1156,"stem":1157},"Health Checks в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F09.libraries\u002F07.health-checks",{"title":1159,"path":1160,"stem":1161},"Feature Management та Feature Flags в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffeature-management","01.csharp\u002F11.aspnet\u002F09.libraries\u002F08.feature-management",{"title":1163,"path":1164,"stem":1165},"Відправка Email з FluentEmail в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-email","01.csharp\u002F11.aspnet\u002F09.libraries\u002F09.fluent-email",{"title":1167,"path":1168,"stem":1169},"Генерація PDF з QuestPDF в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fquest-pdf","01.csharp\u002F11.aspnet\u002F09.libraries\u002F10.quest-pdf",{"title":1171,"path":1172,"stem":1173},"Генерація тестових даних з Bogus в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fbogus","01.csharp\u002F11.aspnet\u002F09.libraries\u002F11.bogus",{"title":1175,"path":1176,"stem":1177},"Humanizer та Guard Clauses в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhumanizer-guard","01.csharp\u002F11.aspnet\u002F09.libraries\u002F12.humanizer-guard",{"title":1179,"path":1180,"stem":1181},"План модуля 10.libraries — Популярні бібліотеки ASP.NET","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fplan","01.csharp\u002F11.aspnet\u002F09.libraries\u002Fplan",{"title":1183,"icon":1184,"path":1185,"stem":1186,"children":1187,"page":59},"Razor Pages","i-lucide-layout-template","\u002Fcsharp\u002Faspnet\u002Frazor-pages","01.csharp\u002F11.aspnet\u002F10.razor-pages",[1188,1192,1196,1200,1204,1208],{"title":1189,"path":1190,"stem":1191},"Від Minimal API до Razor Pages: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ffrom-minimal-api","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F01.from-minimal-api",{"title":1193,"path":1194,"stem":1195},"PageModel: логіка сторінки Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fpage-model","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F02.page-model",{"title":1197,"path":1198,"stem":1199},"Razor синтаксис: шаблонізатор у .cshtml","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Frazor-syntax","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F03.razor-syntax",{"title":1201,"path":1202,"stem":1203},"Tag Helpers: типізований HTML","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ftag-helpers","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F04.tag-helpers",{"title":1205,"path":1206,"stem":1207},"Форми і валідація: повний цикл обробки даних","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fforms-validation","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F05.forms-validation",{"title":1209,"path":1210,"stem":1211},"Практичний проєкт: TaskManager на Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fproject-task-manager","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F06.project-task-manager",{"title":1213,"path":1214,"stem":1215,"children":1216,"page":59},"ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc","01.csharp\u002F11.aspnet\u002F11.mvc",[1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285],{"title":1218,"path":1219,"stem":1220},"Патерн MVC: архітектура, що змінила веб","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-pattern","01.csharp\u002F11.aspnet\u002F11.mvc\u002F01.mvc-pattern",{"title":1222,"path":1223,"stem":1224},"Від Razor Pages до MVC: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffrom-razor-pages","01.csharp\u002F11.aspnet\u002F11.mvc\u002F02.from-razor-pages",{"title":1226,"path":1227,"stem":1228},"Controllers та Actions: серце MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fcontrollers-actions","01.csharp\u002F11.aspnet\u002F11.mvc\u002F03.controllers-actions",{"title":1230,"path":1231,"stem":1232},"Маршрутизація в MVC: Convention vs Attribute Routing","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Frouting-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F04.routing-mvc",{"title":1234,"path":1235,"stem":1236},"Model Binding: від HTTP до C#","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmodel-binding","01.csharp\u002F11.aspnet\u002F11.mvc\u002F05.model-binding",{"title":1238,"path":1239,"stem":1240},"Views, ViewData, ViewBag, TempData і ViewModel","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fviews-viewdata-tempdata","01.csharp\u002F11.aspnet\u002F11.mvc\u002F06.views-viewdata-tempdata",{"title":1242,"path":1243,"stem":1244},"Filters: аспектно-орієнтоване програмування в MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffilters","01.csharp\u002F11.aspnet\u002F11.mvc\u002F07.filters",{"title":1246,"path":1247,"stem":1248},"Areas: структурування великих застосунків","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fareas","01.csharp\u002F11.aspnet\u002F11.mvc\u002F08.areas",{"title":1250,"path":1251,"stem":1252},"View Components: повторювані незалежні блоки UI","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fview-components","01.csharp\u002F11.aspnet\u002F11.mvc\u002F09.view-components",{"title":1254,"path":1255,"stem":1256},"Display та Editor Templates","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fdisplay-editor-templates","01.csharp\u002F11.aspnet\u002F11.mvc\u002F10.display-editor-templates",{"title":1258,"path":1259,"stem":1260},"Валідація: IValidatableObject та FluentValidation","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fvalidation-advanced","01.csharp\u002F11.aspnet\u002F11.mvc\u002F11.validation-advanced",{"title":1262,"path":1263,"stem":1264},"HTMX: інтерактивність через HTML-атрибути","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx","01.csharp\u002F11.aspnet\u002F11.mvc\u002F12.htmx",{"title":1266,"path":1267,"stem":1268},"HTMX у ASP.NET Core MVC: серверна інтеграція","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fajax-htmx-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F13.ajax-htmx-mvc",{"title":1270,"path":1271,"stem":1272},"Практичний проєкт: Каталог товарів з HTMX","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F14.htmx-project",{"title":1274,"path":1275,"stem":1276},"Завантаження та обробка файлів","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffile-upload","01.csharp\u002F11.aspnet\u002F11.mvc\u002F15.file-upload",{"title":1278,"path":1279,"stem":1280},"Глобалізація та Локалізація MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fglobalization-localization","01.csharp\u002F11.aspnet\u002F11.mvc\u002F16.globalization-localization",{"title":1282,"path":1283,"stem":1284},"Підсумковий проєкт: Блог-платформа","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F17.mvc-project",{"title":1286,"path":1287,"stem":1288},"План курсу: ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fplan","01.csharp\u002F11.aspnet\u002F11.mvc\u002Fplan",{"title":1290,"path":1291,"stem":1292,"children":1293,"page":59},"Web Api","\u002Fcsharp\u002Faspnet\u002Fweb-api","01.csharp\u002F11.aspnet\u002F12.web-api",[1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334,1338,1342],{"title":1295,"path":1296,"stem":1297},"Від Minimal API до Controller-based API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffrom-minimal-api-to-controllers","01.csharp\u002F11.aspnet\u002F12.web-api\u002F01.from-minimal-api-to-controllers",{"title":1299,"path":1300,"stem":1301},"ControllerBase, ActionResult\u003CT> та Response Types","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontroller-base-actionresult","01.csharp\u002F11.aspnet\u002F12.web-api\u002F02.controller-base-actionresult",{"title":1303,"path":1304,"stem":1305},"Content Negotiation - JSON, XML та власні форматери","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontent-negotiation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F03.content-negotiation",{"title":1307,"path":1308,"stem":1309},"Версіонування API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-versioning","01.csharp\u002F11.aspnet\u002F12.web-api\u002F04.api-versioning",{"title":1311,"path":1312,"stem":1313},"ProblemDetails та структурована обробка помилок","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fproblemdetails-error-handling","01.csharp\u002F11.aspnet\u002F12.web-api\u002F05.problemdetails-error-handling",{"title":1315,"path":1316,"stem":1317},"Фільтри у Web API контексті","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffilters-for-api","01.csharp\u002F11.aspnet\u002F12.web-api\u002F06.filters-for-api",{"title":1319,"path":1320,"stem":1321},"Пагінація, фільтрація та сортування","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fpagination-filtering-sorting","01.csharp\u002F11.aspnet\u002F12.web-api\u002F07.pagination-filtering-sorting",{"title":1323,"path":1324,"stem":1325},"HATEOAS та Resource Expansion","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhateoas-resource-expansion","01.csharp\u002F11.aspnet\u002F12.web-api\u002F08.hateoas-resource-expansion",{"title":1327,"path":1328,"stem":1329},"Гібридна архітектура - Minimal API + Controllers","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fminimal-api-vs-controllers-hybrid","01.csharp\u002F11.aspnet\u002F12.web-api\u002F09.minimal-api-vs-controllers-hybrid",{"title":1331,"path":1332,"stem":1333},"Документація API - Swashbuckle, NSwag та генерація клієнтів","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-documentation-generation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F10.api-documentation-generation",{"title":1335,"path":1336,"stem":1337},"Health Checks та моніторинг API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhealth-checks-monitoring","01.csharp\u002F11.aspnet\u002F12.web-api\u002F11.health-checks-monitoring",{"title":1339,"path":1340,"stem":1341},"Підсумковий проєкт - Production-Ready REST API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fweb-api-project","01.csharp\u002F11.aspnet\u002F12.web-api\u002F12.web-api-project",{"title":1343,"path":1344,"stem":1345},"План курсу: ASP.NET Core Web API (Controllers)","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fplan","01.csharp\u002F11.aspnet\u002F12.web-api\u002Fplan",{"title":1347,"icon":1348,"path":1349,"stem":1350,"children":1351,"page":59},"Моніторинг","i-lucide-activity","\u002Fcsharp\u002Faspnet\u002Fmonitoring","01.csharp\u002F11.aspnet\u002F13.monitoring",[1352,1356,1360],{"title":1353,"path":1354,"stem":1355},"Спостережуваність: від console.log до production-систем","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fobservability-intro","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F01.observability-intro",{"title":1357,"path":1358,"stem":1359},"Health Checks: перший рівень observability","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F02.health-checks",{"title":1361,"path":1362,"stem":1363},"Вбудовані метрики .NET 10 та System.Diagnostics.Metrics","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fdotnet-metrics","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F03.dotnet-metrics",{"title":1365,"icon":1366,"path":1367,"stem":1368,"children":1369,"page":59},"Desktop UI","i-lucide-app-window","\u002Fcsharp\u002Fdesktop-ui","01.csharp\u002F12.desktop-ui",[1370,1374,1378,1382,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642,1646,1650],{"title":1371,"path":1372,"stem":1373},"Що таке десктопна розробка?","\u002Fcsharp\u002Fdesktop-ui\u002Fwhat-is-desktop-dev","01.csharp\u002F12.desktop-ui\u002F01.what-is-desktop-dev",{"title":1375,"path":1376,"stem":1377},"Архітектура WPF — як влаштований графічний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-architecture","01.csharp\u002F12.desktop-ui\u002F02.wpf-architecture",{"title":1379,"path":1380,"stem":1381},"Перший WPF-проєкт — від нуля до вікна","\u002Fcsharp\u002Fdesktop-ui\u002Ffirst-wpf-app","01.csharp\u002F12.desktop-ui\u002F03.first-wpf-app",{"title":1383,"path":1384,"stem":1385},"Перший Avalonia-проєкт: WPF для всіх платформ","\u002Fcsharp\u002Fdesktop-ui\u002F03a.first-avalonia-app","01.csharp\u002F12.desktop-ui\u002F03a.first-avalonia-app",{"title":1387,"path":1388,"stem":1389},"XAML: декларативний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-basics","01.csharp\u002F12.desktop-ui\u002F04.xaml-basics",{"title":1391,"path":1392,"stem":1393},"Fluent UI у WPF — сучасний дизайн Windows 11","\u002Fcsharp\u002Fdesktop-ui\u002F04a.wpf-fluent-ui","01.csharp\u002F12.desktop-ui\u002F04a.wpf-fluent-ui",{"title":1395,"path":1396,"stem":1397},"WPF UI — сучасна бібліотека Fluent контролів","\u002Fcsharp\u002Fdesktop-ui\u002F04b.wpf-ui-library","01.csharp\u002F12.desktop-ui\u002F04b.wpf-ui-library",{"title":1399,"path":1400,"stem":1401},"HandyControl — велика бібліотека UI контролів для WPF","\u002Fcsharp\u002Fdesktop-ui\u002F04c.handycontrol-library","01.csharp\u002F12.desktop-ui\u002F04c.handycontrol-library",{"title":1403,"path":1404,"stem":1405},"Простори імен та ресурси XAML","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-namespaces-resources","01.csharp\u002F12.desktop-ui\u002F05.xaml-namespaces-resources",{"title":1407,"path":1408,"stem":1409},"XAML в Avalonia: ключові відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F05a.avalonia-xaml-differences","01.csharp\u002F12.desktop-ui\u002F05a.avalonia-xaml-differences",{"title":1411,"path":1412,"stem":1413},"Розширення розмітки XAML (Markup Extensions)","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-markup-extensions","01.csharp\u002F12.desktop-ui\u002F06.xaml-markup-extensions",{"title":1415,"path":1416,"stem":1417},"Панелі Layout: StackPanel, WrapPanel, DockPanel","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part1","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part1",{"title":1419,"path":1420,"stem":1421},"Grid, Canvas, UniformGrid","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part2","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part2",{"title":1423,"path":1424,"stem":1425},"Просунуті техніки Layout","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-advanced","01.csharp\u002F12.desktop-ui\u002F08.layout-advanced",{"title":1427,"path":1428,"stem":1429},"Адаптивний Layout та найкращі практики","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-responsive","01.csharp\u002F12.desktop-ui\u002F09.layout-responsive",{"title":1431,"path":1432,"stem":1433},"Layout в Avalonia: відмінності та нові можливості","\u002Fcsharp\u002Fdesktop-ui\u002F09a.layout-avalonia","01.csharp\u002F12.desktop-ui\u002F09a.layout-avalonia",{"title":1435,"path":1436,"stem":1437},"Button, Image, ProgressBar та інші базові контроли","\u002Fcsharp\u002Fdesktop-ui\u002Fbasic-controls","01.csharp\u002F12.desktop-ui\u002F10.basic-controls",{"title":1439,"path":1440,"stem":1441},"Контроли в Avalonia: відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F10a.controls-avalonia","01.csharp\u002F12.desktop-ui\u002F10a.controls-avalonia",{"title":1443,"path":1444,"stem":1445},"Текстові контроли — TextBlock, TextBox, RichTextBox","\u002Fcsharp\u002Fdesktop-ui\u002Ftext-controls","01.csharp\u002F12.desktop-ui\u002F11.text-controls",{"title":1447,"path":1448,"stem":1449},"Контроли вибору — CheckBox, RadioButton, ComboBox, ListBox, DatePicker","\u002Fcsharp\u002Fdesktop-ui\u002Fselection-controls","01.csharp\u002F12.desktop-ui\u002F12.selection-controls",{"title":1451,"path":1452,"stem":1453},"Content Model — GroupBox, Expander, TabControl, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fcontent-controls","01.csharp\u002F12.desktop-ui\u002F13.content-controls",{"title":1455,"path":1456,"stem":1457},"UI\u002FUX принципи десктопних застосунків","\u002Fcsharp\u002Fdesktop-ui\u002F13a.ui-ux-principles","01.csharp\u002F12.desktop-ui\u002F13a.ui-ux-principles",{"title":1459,"path":1460,"stem":1461},"Dependency Properties — Концепція та Value Resolution","\u002Fcsharp\u002Fdesktop-ui\u002Fdependency-properties-part1","01.csharp\u002F12.desktop-ui\u002F14.dependency-properties-part1",{"title":1463,"path":1464,"stem":1465},"Avalonia Property System — StyledProperty та DirectProperty","\u002Fcsharp\u002Fdesktop-ui\u002F14a.avalonia-property-system","01.csharp\u002F12.desktop-ui\u002F14a.avalonia-property-system",{"title":1467,"path":1468,"stem":1469},"Attached Properties — Властивості без меж","\u002Fcsharp\u002Fdesktop-ui\u002Fattached-properties","01.csharp\u002F12.desktop-ui\u002F15.attached-properties",{"title":1471,"path":1472,"stem":1473},"Routed Events — Маршрутизація подій у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Frouted-events","01.csharp\u002F12.desktop-ui\u002F16.routed-events",{"title":1475,"path":1476,"stem":1477},"Data Binding — Від Code-Behind до Декларативності","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part1","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part1",{"title":1479,"path":1480,"stem":1481},"INotifyPropertyChanged — Живе оновлення UI","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part2","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part2",{"title":1483,"path":1484,"stem":1485},"Compiled Bindings в Avalonia — Безпека на етапі компіляції","\u002Fcsharp\u002Fdesktop-ui\u002F17a.avalonia-compiled-bindings","01.csharp\u002F12.desktop-ui\u002F17a.avalonia-compiled-bindings",{"title":1487,"path":1488,"stem":1489},"Просунутий Data Binding — ElementName, RelativeSource, MultiBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-advanced","01.csharp\u002F12.desktop-ui\u002F18.data-binding-advanced",{"title":1491,"path":1492,"stem":1493},"Value Converters — Перетворення типів даних у Data Binding","\u002Fcsharp\u002Fdesktop-ui\u002Fvalue-converters","01.csharp\u002F12.desktop-ui\u002F19.value-converters",{"title":1495,"path":1496,"stem":1497},"Data Templates — Візуалізація об'єктів у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-templates","01.csharp\u002F12.desktop-ui\u002F20.data-templates",{"title":1499,"path":1500,"stem":1501},"Collections Binding Part 1 — ObservableCollection та ItemsControl","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part1","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part1",{"title":1503,"path":1504,"stem":1505},"Collections Binding Part 2 — ICollectionView, Filtering, Sorting та Virtualization","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part2","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part2",{"title":1507,"path":1508,"stem":1509},"MVVM Pattern — Від Spaghetti Code до архітектури","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-pattern","01.csharp\u002F12.desktop-ui\u002F22.mvvm-pattern",{"title":1511,"path":1512,"stem":1513},"ViewModel Implementation — Від BaseViewModel до валідації","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-implementation","01.csharp\u002F12.desktop-ui\u002F23.viewmodel-implementation",{"title":1515,"path":1516,"stem":1517},"Commands — Від event handlers до декларативних команд","\u002Fcsharp\u002Fdesktop-ui\u002Fcommands","01.csharp\u002F12.desktop-ui\u002F24.commands",{"title":1519,"path":1520,"stem":1521},"MVVM Toolkit — MVVM без boilerplate через Source Generators","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-toolkit","01.csharp\u002F12.desktop-ui\u002F25.mvvm-toolkit",{"title":1523,"path":1524,"stem":1525},"Messenger Pattern — Комунікація між ViewModel без прямих посилань","\u002Fcsharp\u002Fdesktop-ui\u002Fmessenger-pattern","01.csharp\u002F12.desktop-ui\u002F26.messenger-pattern",{"title":1527,"path":1528,"stem":1529},"Стилі WPF — CSS для десктопу","\u002Fcsharp\u002Fdesktop-ui\u002Fstyles-basics","01.csharp\u002F12.desktop-ui\u002F27.styles-basics",{"title":1531,"path":1532,"stem":1533},"CSS-like стилі Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F27a.avalonia-css-styling","01.csharp\u002F12.desktop-ui\u002F27a.avalonia-css-styling",{"title":1535,"path":1536,"stem":1537},"Control Templates — Частина 1. Концепція та TemplateBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part1","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part1",{"title":1539,"path":1540,"stem":1541},"Control Templates — Частина 2. Named Parts та ContentPresenter","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part2","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part2",{"title":1543,"path":1544,"stem":1545},"Control Themes в Avalonia — нова ера стилізації","\u002Fcsharp\u002Fdesktop-ui\u002F28a.avalonia-control-themes","01.csharp\u002F12.desktop-ui\u002F28a.avalonia-control-themes",{"title":1547,"path":1548,"stem":1549},"Triggers та Visual State Manager у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Ftriggers-visual-states","01.csharp\u002F12.desktop-ui\u002F29.triggers-visual-states",{"title":1551,"path":1552,"stem":1553},"Pseudo-classes в Avalonia — замість WPF Triggers","\u002Fcsharp\u002Fdesktop-ui\u002F29a.avalonia-pseudo-classes","01.csharp\u002F12.desktop-ui\u002F29a.avalonia-pseudo-classes",{"title":1555,"path":1556,"stem":1557},"Теми та ресурсні словники у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fresources-themes","01.csharp\u002F12.desktop-ui\u002F30.resources-themes",{"title":1559,"path":1560,"stem":1561},"Avalonia Themes — Fluent Design та система тематизації","\u002Fcsharp\u002Fdesktop-ui\u002F30a.avalonia-themes-fluent","01.csharp\u002F12.desktop-ui\u002F30a.avalonia-themes-fluent",{"title":1563,"path":1564,"stem":1565},"Контроли колекцій — глибоке занурення","\u002Fcsharp\u002Fdesktop-ui\u002Fcollection-controls","01.csharp\u002F12.desktop-ui\u002F31.collection-controls",{"title":1567,"path":1568,"stem":1569},"DataGrid — колонки та базове відображення","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part1","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part1",{"title":1571,"path":1572,"stem":1573},"DataGrid — сортування, фільтрація, редагування","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part2","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part2",{"title":1575,"path":1576,"stem":1577},"TreeView та GridView","\u002Fcsharp\u002Fdesktop-ui\u002Ftreeview-listview","01.csharp\u002F12.desktop-ui\u002F33.treeview-listview",{"title":1579,"path":1580,"stem":1581},"Меню, Toolbar, ContextMenu, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fmenus-toolbars","01.csharp\u002F12.desktop-ui\u002F34.menus-toolbars",{"title":1583,"path":1584,"stem":1585},"Навігація та керування вікнами. Частина 1: вікна та сторінки","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part1","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part1",{"title":1587,"path":1588,"stem":1589},"Навігація та керування вікнами. Частина 2: MVVM-навігація","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part2","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part2",{"title":1591,"path":1592,"stem":1593},"Avalonia — Навігація та діалоги","\u002Fcsharp\u002Fdesktop-ui\u002F35a.avalonia-navigation-dialogs","01.csharp\u002F12.desktop-ui\u002F35a.avalonia-navigation-dialogs",{"title":1595,"path":1596,"stem":1597},"Діалоги та File Pickers у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdialogs-file-pickers","01.csharp\u002F12.desktop-ui\u002F36.dialogs-file-pickers",{"title":1599,"path":1600,"stem":1601},"UserControl: компонентний підхід у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fuser-controls","01.csharp\u002F12.desktop-ui\u002F37.user-controls",{"title":1603,"path":1604,"stem":1605},"Custom Controls: Lookless Controls у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fcustom-controls","01.csharp\u002F12.desktop-ui\u002F38.custom-controls",{"title":1607,"path":1608,"stem":1609},"Avalonia TemplatedControl — Lookless Controls","\u002Fcsharp\u002Fdesktop-ui\u002F38a.avalonia-templated-controls","01.csharp\u002F12.desktop-ui\u002F38a.avalonia-templated-controls",{"title":1611,"path":1612,"stem":1613},"Анімації у WPF: Storyboard та Easing Functions","\u002Fcsharp\u002Fdesktop-ui\u002Fanimations-transitions","01.csharp\u002F12.desktop-ui\u002F39.animations-transitions",{"title":1615,"path":1616,"stem":1617},"Анімації в Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F39a.avalonia-animations","01.csharp\u002F12.desktop-ui\u002F39a.avalonia-animations",{"title":1619,"path":1620,"stem":1621},"2D Графіка та Мультимедіа у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fmedia-graphics","01.csharp\u002F12.desktop-ui\u002F40.media-graphics",{"title":1623,"path":1624,"stem":1625},"Dependency Injection у WPF та Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Fdi-integration","01.csharp\u002F12.desktop-ui\u002F41.di-integration",{"title":1627,"path":1628,"stem":1629},"SQLite та EF Core у десктопних додатках","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part1","01.csharp\u002F12.desktop-ui\u002F42.data-persistence-part1",{"title":1631,"path":1632,"stem":1633},"Repository Pattern та Unit of Work","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part2","01.csharp\u002F12.desktop-ui\u002F43.data-persistence-part2",{"title":1635,"path":1636,"stem":1637},"Тестування ViewModels","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-testing","01.csharp\u002F12.desktop-ui\u002F44.viewmodel-testing",{"title":1639,"path":1640,"stem":1641},"Avalonia Headless Testing — тестування UI без вікон","\u002Fcsharp\u002Fdesktop-ui\u002F44a.avalonia-headless-testing","01.csharp\u002F12.desktop-ui\u002F44a.avalonia-headless-testing",{"title":1643,"path":1644,"stem":1645},"Кросплатформна розробка з Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-cross-platform","01.csharp\u002F12.desktop-ui\u002F45.avalonia-cross-platform",{"title":1647,"path":1648,"stem":1649},"Пакування та розгортання Avalonia додатків","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F46.avalonia-packaging-deployment",{"title":1651,"path":1652,"stem":1653},"Розгортання WPF застосунків","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F47.wpf-packaging-deployment",{"title":1655,"icon":658,"path":1656,"stem":1657,"children":1658,"page":59},"Network Programming","\u002Fcsharp\u002Fnetwork-programming","01.csharp\u002F13.network-programming",[1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699],{"title":1660,"path":1661,"stem":1662},"Основи комп'ютерних мереж","\u002Fcsharp\u002Fnetwork-programming\u002Ffoundations","01.csharp\u002F13.network-programming\u002F01.foundations",{"title":1664,"path":1665,"stem":1666},"Модель OSI та стек TCP\u002FIP","\u002Fcsharp\u002Fnetwork-programming\u002Fosi-model","01.csharp\u002F13.network-programming\u002F02.osi-model",{"title":1668,"path":1669,"stem":1670},"IP-протокол та адресація","\u002Fcsharp\u002Fnetwork-programming\u002Fip-addressing","01.csharp\u002F13.network-programming\u002F03.ip-addressing",{"title":1672,"path":1673,"stem":1674},"UDP — протокол без з'єднання","\u002Fcsharp\u002Fnetwork-programming\u002Fudp","01.csharp\u002F13.network-programming\u002F05.udp",{"title":1676,"path":1677,"stem":1678},"UDP Broadcast та Multicast","\u002Fcsharp\u002Fnetwork-programming\u002Fudp-broadcast-multicast","01.csharp\u002F13.network-programming\u002F06.udp-broadcast-multicast",{"title":1680,"path":1681,"stem":1682},"HTTP — протокол вебу","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-fundamentals","01.csharp\u002F13.network-programming\u002F07.http-fundamentals",{"title":1684,"path":1685,"stem":1686},"HttpListener — вбудований HTTP-сервер .NET","\u002Fcsharp\u002Fnetwork-programming\u002F07a.http-listener","01.csharp\u002F13.network-programming\u002F07a.http-listener",{"title":1688,"path":1689,"stem":1690},"HTTP Advanced — cookies, аутентифікація та HTTPS","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-advanced","01.csharp\u002F13.network-programming\u002F08.http-advanced",{"title":1692,"path":1693,"stem":1694},"SMTP та протоколи електронної пошти","\u002Fcsharp\u002Fnetwork-programming\u002Fsmtp","01.csharp\u002F13.network-programming\u002F09.smtp",{"title":1696,"path":1697,"stem":1698},"WebSocket — повнодуплексний протокол реального часу","\u002Fcsharp\u002Fnetwork-programming\u002Fwebsockets","01.csharp\u002F13.network-programming\u002F10.websockets",{"title":1700,"path":1701,"stem":1702},"TLS\u002FSSL — криптографічний захист мережевих з'єднань","\u002Fcsharp\u002Fnetwork-programming\u002Ftls-ssl","01.csharp\u002F13.network-programming\u002F11.tls-ssl",{"title":1704,"path":1705,"stem":1706},"C# & .NET: The Ultimate Roadmap","\u002Fcsharp\u002Froadmap","01.csharp\u002Froadmap",{"title":1708,"icon":1709,"path":1710,"stem":1711,"children":1712,"page":59},"C++","i-devicon-cplusplus","\u002Fcpp","02.cpp",[1713,1717,1721,1725,1729,1733,1737,1741,1745,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1844,1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892,1896,1900],{"title":1714,"path":1715,"stem":1716},"Вступ у програмування та алгоритми","\u002Fcpp\u002Fintro-algorithms","02.cpp\u002F01.intro-algorithms",{"title":1718,"path":1719,"stem":1720},"Code Style: угоди про оформлення коду","\u002Fcpp\u002Fcode-style","02.cpp\u002F02.code-style",{"title":1722,"path":1723,"stem":1724},"Середовище розробки та перший проєкт","\u002Fcpp\u002Fide-setup","02.cpp\u002F03.ide-setup",{"title":1726,"path":1727,"stem":1728},"Вивід даних на екран","\u002Fcpp\u002Fdata-output","02.cpp\u002F04.data-output",{"title":1730,"path":1731,"stem":1732},"Типи даних, змінні та константи","\u002Fcpp\u002Fdata-types-variables","02.cpp\u002F05.data-types-variables",{"title":1734,"path":1735,"stem":1736},"Ввід даних з клавіатури","\u002Fcpp\u002Fdata-input","02.cpp\u002F06.data-input",{"title":1738,"path":1739,"stem":1740},"Оператори, перетворення типів та логічні операції","\u002Fcpp\u002Foperators-type-conversion","02.cpp\u002F07.operators-type-conversion",{"title":1742,"path":1743,"stem":1744},"Цикли","\u002Fcpp\u002Floops","02.cpp\u002F08.loops",{"title":32,"path":1746,"stem":1747},"\u002Fcpp\u002Farrays","02.cpp\u002F09.arrays",{"title":1749,"path":1750,"stem":1751},"Алгоритми сортування та аналіз складності","\u002Fcpp\u002Fsorting","02.cpp\u002F10.sorting",{"title":1753,"path":1754,"stem":1755},"Алгоритми пошуку","\u002Fcpp\u002Fsearching","02.cpp\u002F11.searching",{"title":1757,"path":1758,"stem":1759},"Функції: основи","\u002Fcpp\u002Ffunctions-basics","02.cpp\u002F12.functions-basics",{"title":1761,"path":1762,"stem":1763},"Функції: прототипи, область видимості та додаткові можливості","\u002Fcpp\u002Ffunctions-scope","02.cpp\u002F13.functions-scope",{"title":1765,"path":1766,"stem":1767},"Функції: перевантаження та шаблони","\u002Fcpp\u002Ffunctions-overloading-templates","02.cpp\u002F14.functions-overloading-templates",{"title":1769,"path":1770,"stem":1771},"Вказівники: основи","\u002Fcpp\u002Fpointers-basics","02.cpp\u002F15.pointers-basics",{"title":1773,"path":1774,"stem":1775},"Посилання (References)","\u002Fcpp\u002Freferences","02.cpp\u002F16.references",{"title":1777,"path":1778,"stem":1779},"Вказівники, const і масиви","\u002Fcpp\u002Fpointers-const-arrays","02.cpp\u002F17.pointers-const-arrays",{"title":1781,"path":1782,"stem":1783},"Адресна арифметика","\u002Fcpp\u002Fpointer-arithmetic","02.cpp\u002F18.pointer-arithmetic",{"title":1785,"path":1786,"stem":1787},"Динамічна пам'ять","\u002Fcpp\u002Fdynamic-memory","02.cpp\u002F19.dynamic-memory",{"title":1789,"path":1790,"stem":1791},"Вказівники типу void","\u002Fcpp\u002Fvoid-pointers","02.cpp\u002F20.void-pointers",{"title":1793,"path":1794,"stem":1795},"Вказівники на вказівники","\u002Fcpp\u002Fpointers-to-pointers","02.cpp\u002F21.pointers-to-pointers",{"title":1797,"path":1798,"stem":1799},"Оператор доступу до членів через вказівник (->)","\u002Fcpp\u002Fmember-access-operator","02.cpp\u002F22.member-access-operator",{"title":1801,"path":1802,"stem":1803},"Цикл for-each (Range-based for)","\u002Fcpp\u002Fforeach-loop","02.cpp\u002F23.foreach-loop",{"title":1805,"path":1806,"stem":1807},"Вказівники на функції","\u002Fcpp\u002Ffunction-pointers","02.cpp\u002F24.function-pointers",{"title":1809,"path":1810,"stem":1811},"Лямбда-вирази","\u002Fcpp\u002Flambdas","02.cpp\u002F25.lambdas",{"title":1813,"path":1814,"stem":1815},"Лямбда-захоплення","\u002Fcpp\u002Flambda-captures","02.cpp\u002F26.lambda-captures",{"title":1817,"path":1818,"stem":1819},"Еліпсис","\u002Fcpp\u002Fellipsis","02.cpp\u002F27.ellipsis",{"title":1821,"path":1822,"stem":1823},"Безпечні альтернативи еліпсису","\u002Fcpp\u002F27a.ellipsis","02.cpp\u002F27a.ellipsis",{"title":1825,"path":1826,"stem":1827},"Аргументи командного рядка","\u002Fcpp\u002Fcommand-line-arguments","02.cpp\u002F28.command-line-arguments",{"title":1829,"path":1830,"stem":1831},"Перерахування (enum)","\u002Fcpp\u002Fenum","02.cpp\u002F29.enum",{"title":1833,"path":1834,"stem":1835},"Класи-перерахування (enum class)","\u002Fcpp\u002Fenum-class","02.cpp\u002F30.enum-class",{"title":1837,"path":1838,"stem":1839},"Псевдоніми типів (typedef і using)","\u002Fcpp\u002Ftype-aliases","02.cpp\u002F31.type-aliases",{"title":1841,"path":1842,"stem":1843},"Системи числення та двійкова арифметика","\u002Fcpp\u002Fnumber-systems","02.cpp\u002F32.number-systems",{"title":1845,"path":1846,"stem":1847},"Структури (struct): агрегування даних","\u002Fcpp\u002Fstruct","02.cpp\u002F33.struct",{"title":1849,"path":1850,"stem":1851},"Структури у функціях","\u002Fcpp\u002Fstruct-functions","02.cpp\u002F34.struct-functions",{"title":1853,"path":1854,"stem":1855},"Масиви структур і вкладені структури","\u002Fcpp\u002Fstruct-arrays","02.cpp\u002F35.struct-arrays",{"title":1857,"path":1858,"stem":1859},"Патерни struct та межі застосування","\u002Fcpp\u002Fstruct-patterns","02.cpp\u002F36.struct-patterns",{"title":1861,"path":1862,"stem":1863},"Символи та таблиця ASCII","\u002Fcpp\u002Fascii-characters","02.cpp\u002F37.ascii-characters",{"title":1865,"path":1866,"stem":1867},"Unicode та кодування UTF","\u002Fcpp\u002Funicode-utf","02.cpp\u002F38.unicode-utf",{"title":1869,"path":1870,"stem":1871},"C-style рядки","\u002Fcpp\u002Fc-strings","02.cpp\u002F39.c-strings",{"title":1873,"path":1874,"stem":1875},"Вступ до std::string","\u002Fcpp\u002Fstd-string-intro","02.cpp\u002F40.std-string-intro",{"title":1877,"path":1878,"stem":1879},"Довжина, ємність та доступ до символів std::string","\u002Fcpp\u002Fstd-string-capacity-access","02.cpp\u002F41.std-string-capacity-access",{"title":1881,"path":1882,"stem":1883},"Модифікація std::string: присвоювання, додавання, вставка, видалення та заміна","\u002Fcpp\u002Fstd-string-modification","02.cpp\u002F42.std-string-modification",{"title":1885,"path":1886,"stem":1887},"Пошук у std::string: find, npos та практичні патерни","\u002Fcpp\u002Fstd-string-search","02.cpp\u002F43.std-string-search",{"title":1889,"path":1890,"stem":1891},"std::string_view: невласницький погляд на рядок без копіювання","\u002Fcpp\u002Fstd-string-view","02.cpp\u002F44.std-string-view",{"title":1893,"path":1894,"stem":1895},"Об'єднання (union): один блок пам'яті, кілька інтерпретацій","\u002Fcpp\u002Funion","02.cpp\u002F45.union",{"title":1897,"path":1898,"stem":1899},"Організація коду: файли, препроцесор, простори імен","\u002Fcpp\u002Fmultifile-programs","02.cpp\u002F46.multifile-programs",{"title":1901,"path":1902,"stem":1903},"План навчання: Курс C++ — Продовження (Статті 29–60+)","\u002Fcpp\u002Fcurriculum-plan","02.cpp\u002Fcurriculum-plan",{"title":1905,"icon":1906,"path":1907,"stem":1908,"children":1909,"page":59},"JavaScript","i-devicon-javascript","\u002Fjavascript","03.javascript",[1910,1936,1990,2012,2316,2354],{"title":1911,"icon":1912,"path":1913,"stem":1914,"children":1915,"page":59},"Events","i-lucide-mouse-pointer-click","\u002Fjavascript\u002Fevents","03.javascript\u002F01.events",[1916,1920,1924,1928,1932],{"title":1917,"path":1918,"stem":1919},"Вступ до подій браузера","\u002Fjavascript\u002Fevents\u002Fintro","03.javascript\u002F01.events\u002F01.intro",{"title":1921,"path":1922,"stem":1923},"Бульбашковий механізм (Bubbling) та занурення (Capturing)","\u002Fjavascript\u002Fevents\u002Fbubbling-capturing","03.javascript\u002F01.events\u002F02.bubbling-capturing",{"title":1925,"path":1926,"stem":1927},"Делегування подій (Event Delegation)","\u002Fjavascript\u002Fevents\u002Fdelegate-events","03.javascript\u002F01.events\u002F03.delegate-events",{"title":1929,"path":1930,"stem":1931},"Типові дії браузера та preventDefault()","\u002Fjavascript\u002Fevents\u002Fprevent-default","03.javascript\u002F01.events\u002F04.prevent-default",{"title":1933,"path":1934,"stem":1935},"Запуск користувацьких подій (Custom Events)","\u002Fjavascript\u002Fevents\u002Fcustom-events","03.javascript\u002F01.events\u002F05.custom-events",{"title":1937,"icon":1938,"path":1939,"stem":1940,"children":1941,"page":59},"Network","i-lucide-globe","\u002Fjavascript\u002Fnetwork","03.javascript\u002F02.network",[1942,1946,1950,1954,1958,1962,1966,1970,1974,1978,1982,1986],{"title":1943,"path":1944,"stem":1945},"Fetch API - Сучасний підхід до HTTP-запитів","\u002Fjavascript\u002Fnetwork\u002F01-fetch-api","03.javascript\u002F02.network\u002F01-fetch-api",{"title":1947,"path":1948,"stem":1949},"FormData - Робота з формами та файлами","\u002Fjavascript\u002Fnetwork\u002F02-formdata","03.javascript\u002F02.network\u002F02-formdata",{"title":1951,"path":1952,"stem":1953},"Відстеження прогресу завантаження","\u002Fjavascript\u002Fnetwork\u002F03-download-progress","03.javascript\u002F02.network\u002F03-download-progress",{"title":1955,"path":1956,"stem":1957},"Переривання fetch-запитів","\u002Fjavascript\u002Fnetwork\u002F04-abort-requests","03.javascript\u002F02.network\u002F04-abort-requests",{"title":1959,"path":1960,"stem":1961},"CORS - Запити між різними джерелами","\u002Fjavascript\u002Fnetwork\u002F05-cors","03.javascript\u002F02.network\u002F05-cors",{"title":1963,"path":1964,"stem":1965},"Fetch API - Повний довідник опцій","\u002Fjavascript\u002Fnetwork\u002F06-fetch-options","03.javascript\u002F02.network\u002F06-fetch-options",{"title":1967,"path":1968,"stem":1969},"URL Objects - Робота з посиланнями","\u002Fjavascript\u002Fnetwork\u002F07-url-objects","03.javascript\u002F02.network\u002F07-url-objects",{"title":1971,"path":1972,"stem":1973},"XMLHttpRequest - AJAX та низькорівневі запити","\u002Fjavascript\u002Fnetwork\u002F08-xmlhttprequest","03.javascript\u002F02.network\u002F08-xmlhttprequest",{"title":1975,"path":1976,"stem":1977},"Відновлюване завантаження файлів","\u002Fjavascript\u002Fnetwork\u002F09-resumable-upload","03.javascript\u002F02.network\u002F09-resumable-upload",{"title":1979,"path":1980,"stem":1981},"Cookies, document.cookie та світ після \"Cookiepocalypse\"","\u002Fjavascript\u002Fnetwork\u002F10-cookies","03.javascript\u002F02.network\u002F10-cookies",{"title":1983,"path":1984,"stem":1985},"js-cookie: Керування Cookies без Болю","\u002Fjavascript\u002Fnetwork\u002F11-js-cookie","03.javascript\u002F02.network\u002F11-js-cookie",{"title":1987,"path":1988,"stem":1989},"Axios: Потужний HTTP-клієнт для JavaScript","\u002Fjavascript\u002Fnetwork\u002F12-axios","03.javascript\u002F02.network\u002F12-axios",{"title":1991,"icon":1992,"path":1993,"stem":1994,"children":1995,"page":59},"Bom","i-lucide-monitor","\u002Fjavascript\u002Fbom","03.javascript\u002F03.bom",[1996,2000,2004,2008],{"title":1997,"path":1998,"stem":1999},"LocalStorage, SessionStorage та patterns збереження даних","\u002Fjavascript\u002Fbom\u002F01-localstorage","03.javascript\u002F03.bom\u002F01-localstorage",{"title":2001,"path":2002,"stem":2003},"Location Object - Керування адресою сторінки","\u002Fjavascript\u002Fbom\u002F02-location-object","03.javascript\u002F03.bom\u002F02-location-object",{"title":2005,"path":2006,"stem":2007},"History API - Керування історією браузера","\u002Fjavascript\u002Fbom\u002F03-history-api","03.javascript\u002F03.bom\u002F03-history-api",{"title":2009,"path":2010,"stem":2011},"Navigator Object - Ідентифікація та Можливості Пристрою","\u002Fjavascript\u002Fbom\u002F04-navigator-object","03.javascript\u002F03.bom\u002F04-navigator-object",{"title":2013,"icon":2014,"path":2015,"stem":2016,"children":2017},"React","i-devicon-react","\u002Fjavascript\u002Freact","03.javascript\u002F04.react\u002Findex",[2018,2019,2023,2027,2031,2035,2098,2133,2285],{"title":2013,"path":2015,"stem":2016},{"title":2020,"path":2021,"stem":2022},"Робота з Формами в React","\u002Fjavascript\u002Freact\u002Freact-forms","03.javascript\u002F04.react\u002F01.react-forms",{"title":2024,"path":2025,"stem":2026},"React Hook Form: Професійна Робота з Формами","\u002Fjavascript\u002Freact\u002Freact-hook-form","03.javascript\u002F04.react\u002F02.react-hook-form",{"title":2028,"path":2029,"stem":2030},"React Hook Form: Глибоке Розуміння Архітектури та Оптимізації","\u002Fjavascript\u002Freact\u002Freact-hook-form-new","03.javascript\u002F04.react\u002F02.react-hook-form-new",{"title":2032,"path":2033,"stem":2034},"Axios та React: Професійна Архітектура Запитів","\u002Fjavascript\u002Freact\u002Fdata-fetching-axios","03.javascript\u002F04.react\u002F03.data-fetching-axios",{"title":2036,"icon":132,"path":2037,"stem":2038,"children":2039},"Tanstack Query","\u002Fjavascript\u002Freact\u002Ftanstack-query","03.javascript\u002F04.react\u002F04.tanstack-query\u002Findex",[2040,2042,2046,2050,2054,2058,2062,2066,2070,2074,2078,2082,2086,2090,2094],{"title":2041,"path":2037,"stem":2038},"TanStack Query: Майстерність Керування Станом Сервера",{"title":2043,"path":2044,"stem":2045},"Парадигма Server State: Чому useEffect недостатньо","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-state-paradigm","03.javascript\u002F04.react\u002F04.tanstack-query\u002F01.server-state-paradigm",{"title":2047,"path":2048,"stem":2049},"Встановлення та Налаштування: Фундамент","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Finstallation-and-devtools","03.javascript\u002F04.react\u002F04.tanstack-query\u002F02.installation-and-devtools",{"title":2051,"path":2052,"stem":2053},"Основи Запитів та Магія Ключів","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fquery-basics-and-keys","03.javascript\u002F04.react\u002F04.tanstack-query\u002F03.query-basics-and-keys",{"title":2055,"path":2056,"stem":2057},"Синхронізація Даних: Життєвий Цикл Запиту","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fdata-synchronization","03.javascript\u002F04.react\u002F04.tanstack-query\u002F04.data-synchronization",{"title":2059,"path":2060,"stem":2061},"Мутації та Інвалідація: Зміна Даних","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fmutations-and-invalidation","03.javascript\u002F04.react\u002F04.tanstack-query\u002F05.mutations-and-invalidation",{"title":2063,"path":2064,"stem":2065},"Оптимістичні Оновлення: Швидше за Світло","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Foptimistic-updates","03.javascript\u002F04.react\u002F04.tanstack-query\u002F06.optimistic-updates",{"title":2067,"path":2068,"stem":2069},"Пагінація та Infinite Scroll","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fpagination-and-load-more","03.javascript\u002F04.react\u002F04.tanstack-query\u002F07.pagination-and-load-more",{"title":2071,"path":2072,"stem":2073},"Просунуті Патерни та Оптимізація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F04.tanstack-query\u002F08.advanced-patterns",{"title":2075,"path":2076,"stem":2077},"Архітектура та Best Practices","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Farchitecture-and-best-practices","03.javascript\u002F04.react\u002F04.tanstack-query\u002F09.architecture-and-best-practices",{"title":2079,"path":2080,"stem":2081},"Server-Side Rendering (SSR) та Гідратація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-side-rendering","03.javascript\u002F04.react\u002F04.tanstack-query\u002F10.server-side-rendering",{"title":2083,"path":2084,"stem":2085},"Стратегії Тестування","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Ftesting-strategies","03.javascript\u002F04.react\u002F04.tanstack-query\u002F11.testing-strategies",{"title":2087,"path":2088,"stem":2089},"Аутентифікація та Обробка Помилок","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fauthentication-and-errors","03.javascript\u002F04.react\u002F04.tanstack-query\u002F12.authentication-and-errors",{"title":2091,"path":2092,"stem":2093},"React Suspense та Майбутнє","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Freact-suspense","03.javascript\u002F04.react\u002F04.tanstack-query\u002F13.react-suspense",{"title":2095,"path":2096,"stem":2097},"Глибоке Занурення в Продуктивність","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fperformance-deep-dive","03.javascript\u002F04.react\u002F04.tanstack-query\u002F14.performance-deep-dive",{"title":2099,"icon":2014,"path":2100,"stem":2101,"children":2102},"React Router","\u002Fjavascript\u002Freact\u002Freact-router","03.javascript\u002F04.react\u002F05.react-router\u002Findex",[2103,2105,2109,2113,2117,2121,2125,2129],{"title":2104,"path":2100,"stem":2101},"React Router: Навігаційна система сучасного вебу",{"title":2106,"path":2107,"stem":2108},"Налаштування та Базовий Роутинг","\u002Fjavascript\u002Freact\u002Freact-router\u002Fsetup-and-basic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F01.setup-and-basic-routing",{"title":2110,"path":2111,"stem":2112},"Динамічна Навігація","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnavigation-and-links","03.javascript\u002F04.react\u002F05.react-router\u002F02.navigation-and-links",{"title":2114,"path":2115,"stem":2116},"Вкладені Маршрути та Макети","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnested-routes-and-layouts","03.javascript\u002F04.react\u002F05.react-router\u002F03.nested-routes-and-layouts",{"title":2118,"path":2119,"stem":2120},"Динамічні Маршрути та Параметри","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdynamic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F04.dynamic-routing",{"title":2122,"path":2123,"stem":2124},"Data APIs: Loaders та Actions","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdata-loading","03.javascript\u002F04.react\u002F05.react-router\u002F05.data-loading",{"title":2126,"path":2127,"stem":2128},"Просунуті Патерни","\u002Fjavascript\u002Freact\u002Freact-router\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F05.react-router\u002F06.advanced-patterns",{"title":2130,"path":2131,"stem":2132},"Legacy Routing: Компонентний підхід","\u002Fjavascript\u002Freact\u002Freact-router\u002Flegacy-routing","03.javascript\u002F04.react\u002F05.react-router\u002F07.legacy-routing",{"title":2134,"icon":132,"path":2135,"stem":2136,"children":2137},"Redux","\u002Fjavascript\u002Freact\u002Fredux","03.javascript\u002F04.react\u002F06.redux\u002Findex",[2138,2140,2156,2185,2194,2215,2231,2260],{"title":2139,"path":2135,"stem":2136},"Redux: Еволюція управління станом",{"title":14,"icon":15,"path":2141,"stem":2142,"children":2143,"page":59},"\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals",[2144,2148,2152],{"title":2145,"path":2146,"stem":2147},"Вступ до State Management","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fintro-state-management","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F01.intro-state-management",{"title":2149,"path":2150,"stem":2151},"Філософія Redux та Три Принципи","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fredux-philosophy","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F02.redux-philosophy",{"title":2153,"path":2154,"stem":2155},"Чисті функції та Іммутабельність","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fpure-functions-immutability","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F03.pure-functions-immutability",{"title":2157,"icon":132,"path":2158,"stem":2159,"children":2160,"page":59},"Classic Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux",[2161,2165,2169,2173,2177,2181],{"title":2162,"path":2163,"stem":2164},"Створення Store (Classic Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fstore-setup","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F01.store-setup",{"title":2166,"path":2167,"stem":2168},"Actions, Constants та Action Creators","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Factions-constants","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F02.actions-constants",{"title":2170,"path":2171,"stem":2172},"Логіка Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freducers","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F03.reducers",{"title":2174,"path":2175,"stem":2176},"Комбінування Reducers (Root Reducer)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fdata-flow","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F04.data-flow",{"title":2178,"path":2179,"stem":2180},"Підключення до React (React-Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freact-redux-connection","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F05.react-redux-connection",{"title":2182,"path":2183,"stem":2184},"Middleware та Асинхронність (Redux Thunk)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fmiddleware-thunk","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F06.middleware-thunk",{"title":2186,"icon":132,"path":2187,"stem":2188,"children":2189,"page":59},"Transition To Rtk","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk",[2190],{"title":2191,"path":2192,"stem":2193},"Проблеми класичного Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk\u002Fproblems-with-classic","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk\u002F01.problems-with-classic",{"title":2195,"icon":132,"path":2196,"stem":2197,"children":2198,"page":59},"Redux Toolkit","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit",[2199,2203,2207,2211],{"title":2200,"path":2201,"stem":2202},"Налаштування Store з configureStore","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fconfigure-store","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F01.configure-store",{"title":2204,"path":2205,"stem":2206},"createSlice: Революція в Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fcreate-slice","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F02.create-slice",{"title":2208,"path":2209,"stem":2210},"Асинхронність з createAsyncThunk","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fasync-thunks","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F03.async-thunks",{"title":2212,"path":2213,"stem":2214},"04. Entity Adapter: Керування нормалізованим станом","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fentity-adapter","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F04.entity-adapter",{"title":2216,"icon":92,"path":2217,"stem":2218,"children":2219,"page":59},"Advanced","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced",[2220,2224,2228],{"title":2221,"path":2222,"stem":2223},"Мемоізація та Селектори: Повний Гайд по Reselect","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Fselectors-reselect","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F01.selectors-reselect",{"title":2225,"path":2226,"stem":2227},"RTK Query: Архітектура Серверного Кешу","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Frtk-query-intro","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F02.rtk-query-intro",{"title":2075,"path":2229,"stem":2230},"\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Farchitecture-best-practices","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F03.architecture-best-practices",{"title":2232,"icon":132,"path":2233,"stem":2234,"children":2235,"page":59},"Project Kanban","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban",[2236,2240,2244,2248,2252,2256],{"title":2237,"path":2238,"stem":2239},"Проєкт: Kanban Board (Trello Clone)","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fproject-overview","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F01.project-overview",{"title":2241,"path":2242,"stem":2243},"Налаштування та Типізація","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fsetup-and-types","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F02.setup-and-types",{"title":2245,"path":2246,"stem":2247},"Board Slice: Серце Дошки","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fboard-slice","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F03.board-slice",{"title":2249,"path":2250,"stem":2251},"Логіка Drag & Drop","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fdrag-and-drop-logic","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F04.drag-and-drop-logic",{"title":2253,"path":2254,"stem":2255},"Інтеграція з RTK Query","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Frtk-query-integration","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F05.rtk-query-integration",{"title":2257,"path":2258,"stem":2259},"Optimistic Updates","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Foptimistic-updates","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F06.optimistic-updates",{"title":2261,"icon":132,"path":2262,"stem":2263,"children":2264,"page":59},"Testing","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting","03.javascript\u002F04.react\u002F06.redux\u002F07.testing",[2265,2269,2273,2277,2281],{"title":2266,"path":2267,"stem":2268},"Тестування Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Fintro-testing","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F01.intro-testing",{"title":2270,"path":2271,"stem":2272},"Тестування Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-reducers","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F02.testing-reducers",{"title":2274,"path":2275,"stem":2276},"Тестування Селекторів","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-selectors","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F03.testing-selectors",{"title":2278,"path":2279,"stem":2280},"Тестування Компонентів (Integration)","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-components","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F04.testing-components",{"title":2282,"path":2283,"stem":2284},"Тестування Async Thunks","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-thunks","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F05.testing-thunks",{"title":2286,"icon":132,"path":2287,"stem":2288,"children":2289},"Ui Libraries","\u002Fjavascript\u002Freact\u002Fui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002Findex",[2290,2292,2296,2300,2304,2308,2312],{"title":2291,"path":2287,"stem":2288},"UI Бібліотеки в React",{"title":2293,"path":2294,"stem":2295},"Вступ до UI Бібліотек: Навіщо Винаходити Велосипед Двічі?","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fintroduction-to-ui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002F01.introduction-to-ui-libraries",{"title":2297,"path":2298,"stem":2299},"Філософія shadcn\u002Fui: \"Not a Component Library\"","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-philosophy","03.javascript\u002F04.react\u002F07.ui-libraries\u002F02.shadcn-philosophy",{"title":2301,"path":2302,"stem":2303},"Установка та Налаштування shadcn\u002Fui","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-installation","03.javascript\u002F04.react\u002F07.ui-libraries\u002F03.shadcn-installation",{"title":2305,"path":2306,"stem":2307},"Базові Компоненти shadcn\u002Fui: Фундамент Інтерфейсу","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-basics","03.javascript\u002F04.react\u002F07.ui-libraries\u002F04.shadcn-components-basics",{"title":2309,"path":2310,"stem":2311},"Компоненти Форм: Побудова Інтерактивних Form","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-forms","03.javascript\u002F04.react\u002F07.ui-libraries\u002F05.shadcn-components-forms",{"title":2313,"path":2314,"stem":2315},"Складні Компоненти: Dialog, Dropdown, Table та Command","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-advanced","03.javascript\u002F04.react\u002F07.ui-libraries\u002F06.shadcn-components-advanced",{"title":2317,"icon":2318,"path":2319,"stem":2320,"children":2321,"page":59},"TypeScript","i-devicon-typescript","\u002Fjavascript\u002Ftypescript","03.javascript\u002F05.typescript",[2322,2326,2330,2334,2338,2342,2346,2350],{"title":2323,"path":2324,"stem":2325},"TypeScript: Броня для вашого коду","\u002Fjavascript\u002Ftypescript\u002Fintro-and-basic-types","03.javascript\u002F05.typescript\u002F01.intro-and-basic-types",{"title":2327,"path":2328,"stem":2329},"Майстерність Моделювання Даних: Інтерфейси та Просунуті Типи","\u002Fjavascript\u002Ftypescript\u002Finterfaces-and-advanced-types","03.javascript\u002F05.typescript\u002F02.interfaces-and-advanced-types",{"title":2331,"path":2332,"stem":2333},"Алхімія Типів: Generics та Utility Types","\u002Fjavascript\u002Ftypescript\u002Fgenerics-and-utilities","03.javascript\u002F05.typescript\u002F03.generics-and-utilities",{"title":2335,"path":2336,"stem":2337},"Архітектура та Шаблони: Класи в TypeScript","\u002Fjavascript\u002Ftypescript\u002Fclasses-and-oop","03.javascript\u002F05.typescript\u002F04.classes-and-oop",{"title":2339,"path":2340,"stem":2341},"Продакшн та Екосистема: Advanced Config & Workflow","\u002Fjavascript\u002Ftypescript\u002Fadvanced-patterns-and-config","03.javascript\u002F05.typescript\u002F05.advanced-patterns-and-config",{"title":2343,"path":2344,"stem":2345},"TypeScript у світі React","\u002Fjavascript\u002Ftypescript\u002Freact-basics","03.javascript\u002F05.typescript\u002F06.react-basics",{"title":2347,"path":2348,"stem":2349},"React + TypeScript: Продвинуті патерни","\u002Fjavascript\u002Ftypescript\u002Freact-advanced","03.javascript\u002F05.typescript\u002F07.react-advanced",{"title":2351,"path":2352,"stem":2353},"React + TypeScript: Екосистема та бібліотеки","\u002Fjavascript\u002Ftypescript\u002Freact-ecosystem","03.javascript\u002F05.typescript\u002F08.react-ecosystem",{"title":2355,"path":2356,"stem":2357},"Atomic Design","\u002Fjavascript\u002Fatomic-design","03.javascript\u002F2.atomic-design",{"title":2359,"icon":2360,"path":2361,"stem":2362,"children":2363,"page":59},"Java","i-devicon-java","\u002Fjava","04.java",[2364,2367,2370,2374,2378,2382,2386],{"title":162,"path":2365,"stem":2366},"\u002Fjava\u002Fdata-mapper-part1","04.java\u002F01.data-mapper-part1",{"title":166,"path":2368,"stem":2369},"\u002Fjava\u002Fdata-mapper-part2","04.java\u002F02.data-mapper-part2",{"title":2371,"path":2372,"stem":2373},"Service Layer: Організація бізнес-логіки","\u002Fjava\u002Fservice-layer","04.java\u002F03.service-layer",{"title":2375,"path":2376,"stem":2377},"Rich Domain Model та State Pattern","\u002Fjava\u002Frich-domain-model","04.java\u002F04.rich-domain-model",{"title":2379,"path":2380,"stem":2381},"Патерни для складної бізнес-логіки","\u002Fjava\u002Fbusiness-logic-patterns","04.java\u002F05.business-logic-patterns",{"title":2383,"path":2384,"stem":2385},"Обробка помилок та валідація","\u002Fjava\u002Ferror-handling-validation","04.java\u002F06.error-handling-validation",{"title":2387,"path":2388,"stem":2389,"children":2390,"page":59},"Проектування баз даних","\u002Fjava\u002Fpr2","04.java\u002Fpr2",[2391,2395,2399,2403,2407,2411,2415,2419,2423,2427,2431,2435,2439,2443,2447,2451,2455,2459,2463,2467,2471,2475,2479,2483,2487,2491,2495,2499,2503,2507,2511,2515,2519,2523,2527,2531,2535],{"title":2392,"path":2393,"stem":2394},"Концептуальне моделювання: Мистецтво розуміння предметної області","\u002Fjava\u002Fpr2\u002Fconceptual-modeling","04.java\u002Fpr2\u002F01.conceptual-modeling",{"title":2396,"path":2397,"stem":2398},"Логічне моделювання: Від бізнес-ідей до структур даних","\u002Fjava\u002Fpr2\u002Flogical-modeling","04.java\u002Fpr2\u002F02.logical-modeling",{"title":2400,"path":2401,"stem":2402},"Нормалізація: Гігієна даних та боротьба з аномаліями","\u002Fjava\u002Fpr2\u002Fnormalization","04.java\u002Fpr2\u002F03.normalization",{"title":2404,"path":2405,"stem":2406},"Фізична схема: Від абстракції до DDL","\u002Fjava\u002Fpr2\u002Fphysical-schema","04.java\u002Fpr2\u002F04.physical-schema",{"title":2408,"path":2409,"stem":2410},"Архітектурна класифікація таблиць","\u002Fjava\u002Fpr2\u002Ftable-classification","04.java\u002Fpr2\u002F05.table-classification",{"title":2412,"path":2413,"stem":2414},"Database Migrations: Версіонування схеми з Flyway","\u002Fjava\u002Fpr2\u002Fdatabase-migrations","04.java\u002Fpr2\u002F06.database-migrations",{"title":2416,"path":2417,"stem":2418},"А що, якби це була не реляційна БД?","\u002Fjava\u002Fpr2\u002Fbeyond-relational","04.java\u002Fpr2\u002F07.beyond-relational",{"title":2420,"path":2421,"stem":2422},"Object-Relational Impedance Mismatch: Два світи, що не хочуть дружити","\u002Fjava\u002Fpr2\u002Fimpedance-mismatch","04.java\u002Fpr2\u002F09.impedance-mismatch",{"title":2424,"path":2425,"stem":2426},"JDBC: Перший контакт із базою даних","\u002Fjava\u002Fpr2\u002Fjdbc-fundamentals","04.java\u002Fpr2\u002F10.jdbc-fundamentals",{"title":2428,"path":2429,"stem":2430},"Якість коду: Spotless, SpotBugs та SonarQube","\u002Fjava\u002Fpr2\u002F10a.code-quality","04.java\u002Fpr2\u002F10a.code-quality",{"title":2432,"path":2433,"stem":2434},"Connection Pool: Патерн Object Pool для JDBC-з'єднань","\u002Fjava\u002Fpr2\u002Fconnection-pool","04.java\u002Fpr2\u002F11.connection-pool",{"title":2436,"path":2437,"stem":2438},"Row Data Gateway: Об'єкт як обгортка рядка таблиці","\u002Fjava\u002Fpr2\u002Frow-data-gateway","04.java\u002Fpr2\u002F12.row-data-gateway",{"title":2440,"path":2441,"stem":2442},"Table Data Gateway: Фасад таблиці як архітектурний відступ","\u002Fjava\u002Fpr2\u002Ftable-data-gateway","04.java\u002Fpr2\u002F13.table-data-gateway",{"title":2444,"path":2445,"stem":2446},"Repository + Data Mapper: Правильна шарова архітектура з JDBC","\u002Fjava\u002Fpr2\u002Frepository-data-mapper","04.java\u002Fpr2\u002F14.repository-data-mapper",{"title":2448,"path":2449,"stem":2450},"Identity Map: Кешування сутностей у рамках сесії","\u002Fjava\u002Fpr2\u002Fidentity-map","04.java\u002Fpr2\u002F15.identity-map",{"title":2452,"path":2453,"stem":2454},"Unit of Work: Відстеження змін і координація JDBC-транзакцій","\u002Fjava\u002Fpr2\u002Funit-of-work","04.java\u002Fpr2\u002F16.unit-of-work",{"title":2456,"path":2457,"stem":2458},"Strategy: Замінювані SQL-стратегії для підтримки різних СУБД","\u002Fjava\u002Fpr2\u002Fstrategy-sql","04.java\u002Fpr2\u002F17.strategy-sql",{"title":2460,"path":2461,"stem":2462},"Proxy: Lazy Loading для One-To-Many колекцій","\u002Fjava\u002Fpr2\u002Fproxy-lazy-loading","04.java\u002Fpr2\u002F18.proxy-lazy-loading",{"title":2464,"path":2465,"stem":2466},"Generic Repository через Java Reflection: анотації та динамічний SQL","\u002Fjava\u002Fpr2\u002Fgeneric-repository-reflection","04.java\u002Fpr2\u002F19.generic-repository-reflection",{"title":2468,"path":2469,"stem":2470},"Specification Pattern: Композиція бізнес-правил для складних запитів","\u002Fjava\u002Fpr2\u002Fspecification-pattern","04.java\u002Fpr2\u002F20.specification-pattern",{"title":2472,"path":2473,"stem":2474},"Розширені можливості Specification Pattern: підзапити, агрегації та гібридний підхід","\u002Fjava\u002Fpr2\u002F20a.advanced-specifications","04.java\u002Fpr2\u002F20a.advanced-specifications",{"title":2476,"path":2477,"stem":2478},"Асинхронність у JDBC: Від блокуючих викликів до CompletableFuture","\u002Fjava\u002Fpr2\u002Fasynchronous-jdbc","04.java\u002Fpr2\u002F21.asynchronous-jdbc",{"title":2480,"path":2481,"stem":2482},"Інтеграційне тестування JDBC-репозиторіїв: Embedded H2 та патерн AAA","\u002Fjava\u002Fpr2\u002Fintegration-testing-h2","04.java\u002Fpr2\u002F22.integration-testing-h2",{"title":2484,"path":2485,"stem":2486},"Testcontainers: Тестування з реальною PostgreSQL у Docker-контейнерах","\u002Fjava\u002Fpr2\u002Fintegration-testing-testcontainers","04.java\u002Fpr2\u002F23.integration-testing-testcontainers",{"title":2488,"path":2489,"stem":2490},"Google Guice: Впровадження залежностей у JavaFX-проєкті","\u002Fjava\u002Fpr2\u002Fdependency-injection-guice","04.java\u002Fpr2\u002F24.dependency-injection-guice",{"title":2492,"path":2493,"stem":2494},"JavaFX: Основи побудови графічних інтерфейсів","\u002Fjava\u002Fpr2\u002Fjavafx-fundamentals","04.java\u002Fpr2\u002F25.javafx-fundamentals",{"title":2496,"path":2497,"stem":2498},"Properties та Bindings: Реактивність у JavaFX","\u002Fjava\u002Fpr2\u002Fjavafx-properties-bindings","04.java\u002Fpr2\u002F26.javafx-properties-bindings",{"title":2500,"path":2501,"stem":2502},"MVC vs MVP vs MVVM: Еволюція архітектурних патернів UI","\u002Fjava\u002Fpr2\u002Fui-architecture-patterns","04.java\u002Fpr2\u002F27.ui-architecture-patterns",{"title":2504,"path":2505,"stem":2506},"MVVM на практиці: Побудова ViewModel","\u002Fjava\u002Fpr2\u002Fmvvm-viewmodel-implementation","04.java\u002Fpr2\u002F28.mvvm-viewmodel-implementation",{"title":2508,"path":2509,"stem":2510},"View та Controller: Зв'язування з ViewModel через FXML","\u002Fjava\u002Fpr2\u002Fmvvm-view-controller","04.java\u002Fpr2\u002F29.mvvm-view-controller",{"title":2512,"path":2513,"stem":2514},"Інтеграція MVVM з Guice: Автоматична ін'єкція залежностей","\u002Fjava\u002Fpr2\u002Fmvvm-guice-integration","04.java\u002Fpr2\u002F30.mvvm-guice-integration",{"title":2516,"path":2517,"stem":2518},"Валідація та обробка помилок у MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-validation-error-handling","04.java\u002Fpr2\u002F31.mvvm-validation-error-handling",{"title":2520,"path":2521,"stem":2522},"Навігація та управління екранами у JavaFX MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-navigation-screen-management","04.java\u002Fpr2\u002F32.mvvm-navigation-screen-management",{"title":2524,"path":2525,"stem":2526},"Тестування JavaFX MVVM-додатків","\u002Fjava\u002Fpr2\u002Fmvvm-testing","04.java\u002Fpr2\u002F33.mvvm-testing",{"title":2528,"path":2529,"stem":2530},"Стилізація та теми у JavaFX: CSS та User Experience","\u002Fjava\u002Fpr2\u002Fjavafx-styling-themes","04.java\u002Fpr2\u002F34.javafx-styling-themes",{"title":2532,"path":2533,"stem":2534},"AtlantaFX: Сучасні теми для JavaFX додатків","\u002Fjava\u002Fpr2\u002Fatlantafx-modern-themes","04.java\u002Fpr2\u002F35.atlantafx-modern-themes",{"title":2536,"path":2537,"stem":2538},"Пакування та розповсюдження JavaFX-додатків","\u002Fjava\u002Fpr2\u002Fjar-packaging-distribution","04.java\u002Fpr2\u002F36.jar-packaging-distribution",{"title":2540,"icon":2541,"path":2542,"stem":2543,"children":2544,"page":59},"Python","i-devicon-python","\u002Fpython","05.python",[2545,2549,2552,2556,2560,2564,2568,2572,2576,2580,2584,2588,2592,2596,2600,2604],{"title":2546,"path":2547,"stem":2548},"Модулі, Пакети та Віртуальні Середовища","\u002Fpython\u002Fmodules-packages-venv","05.python\u002F00.modules-packages-venv",{"title":71,"path":2550,"stem":2551},"\u002Fpython\u002Fclasses-objects","05.python\u002F01.classes-objects",{"title":2553,"path":2554,"stem":2555},"Інкапсуляція, Керування Доступом та Властивості","\u002Fpython\u002Fencapsulation","05.python\u002F02.encapsulation",{"title":2557,"path":2558,"stem":2559},"Наслідування, MRO та суперсила super()","\u002Fpython\u002Finheritance-mro","05.python\u002F03.inheritance-mro",{"title":2561,"path":2562,"stem":2563},"Абстракція — ABC проти Статичних Протоколів (PEP 544)","\u002Fpython\u002Fabstraction-protocols","05.python\u002F04.abstraction-protocols",{"title":2565,"path":2566,"stem":2567},"Магічні методи (Dunder) та Емуляція протоколів","\u002Fpython\u002Fdunder-methods","05.python\u002F05.dunder-methods",{"title":2569,"path":2570,"stem":2571},"Декоратори та Керування життєвим циклом методів","\u002Fpython\u002Fdecorators-static-class","05.python\u002F06.decorators-static-class",{"title":2573,"path":2574,"stem":2575},"Дескриптори — Магія доступу до атрибутів","\u002Fpython\u002Fdescriptors","05.python\u002F07.descriptors",{"title":2577,"path":2578,"stem":2579},"Метакласи — Динамічне створення класів під капотом CPython","\u002Fpython\u002Fmetaclasses","05.python\u002F08.metaclasses",{"title":2581,"path":2582,"stem":2583},"Dataclasses, NamedTuple та сучасні контейнери Python","\u002Fpython\u002Fmodern-containers","05.python\u002F09.modern-containers",{"title":2585,"path":2586,"stem":2587},"GIL та модель конкурентності CPython — фундамент перед потоками і процесами","\u002Fpython\u002Fgil-concurrency-intro","05.python\u002F11.gil-concurrency-intro",{"title":2589,"path":2590,"stem":2591},"Threading — конкурентність для I\u002FO-bound задач","\u002Fpython\u002Fthreading","05.python\u002F12.threading",{"title":2593,"path":2594,"stem":2595},"Multiprocessing — справжній паралелізм для CPU-bound задач","\u002Fpython\u002Fmultiprocessing","05.python\u002F13.multiprocessing",{"title":2597,"path":2598,"stem":2599},"asyncio — кооперативна конкурентність та event loop","\u002Fpython\u002Fasyncio","05.python\u002F14.asyncio",{"title":2601,"path":2602,"stem":2603},"📦 Повний посібник з модулів, пакетів та віртуальних середовищ у Python","\u002Fpython\u002Flesson_9","05.python\u002Flesson_9",{"title":2605,"path":2606,"stem":2607},"[object Object]","\u002Fpython\u002Foop-plan","05.python\u002Foop-plan",{"title":2609,"icon":2610,"path":2611,"stem":2612,"children":2613,"page":59},"Бази даних","i-lucide-database","\u002Fdatabases","06.databases",[2614,2644,2667,2704,2733,2751,2785,2797,2806],{"title":2615,"icon":2616,"path":2617,"stem":2618,"children":2619,"page":59},"Intro","i-lucide-play","\u002Fdatabases\u002Fintro","06.databases\u002F01.intro",[2620,2624,2628,2632,2636,2640],{"title":2621,"path":2622,"stem":2623},"Введення в теорію баз даних","\u002Fdatabases\u002Fintro\u002Fintroduction-to-databases","06.databases\u002F01.intro\u002F01.introduction-to-databases",{"title":2625,"path":2626,"stem":2627},"Реляційна модель даних","\u002Fdatabases\u002Fintro\u002Frelational-model-theory","06.databases\u002F01.intro\u002F02.relational-model-theory",{"title":2629,"path":2630,"stem":2631},"ER-моделювання","\u002Fdatabases\u002Fintro\u002Fer-modeling","06.databases\u002F01.intro\u002F03.er-modeling",{"title":2633,"path":2634,"stem":2635},"Логічне проектування БД","\u002Fdatabases\u002Fintro\u002Flogical-schema","06.databases\u002F01.intro\u002F04.logical-schema",{"title":2637,"path":2638,"stem":2639},"Класифікація таблиць","\u002Fdatabases\u002Fintro\u002Ftable-classification","06.databases\u002F01.intro\u002F05.table-classification",{"title":2641,"path":2642,"stem":2643},"PlantUML для баз даних","\u002Fdatabases\u002Fintro\u002Fplantuml-diagrams","06.databases\u002F01.intro\u002F06.plantuml-diagrams",{"title":2645,"icon":2610,"path":2646,"stem":2647,"children":2648,"page":59},"MS SQL Server Start","\u002Fdatabases\u002Fms-sql-server-start","06.databases\u002F02.ms-sql-server-start",[2649,2653,2659,2663],{"title":2650,"path":2651,"stem":2652},"Типи даних у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fdata-types","06.databases\u002F02.ms-sql-server-start\u002F01.data-types",{"title":2654,"path":2655,"stem":2656,"children":2657},"Індекси у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-indexes","06.databases\u002F02.ms-sql-server-start\u002F02.sql-indexes",[2658],{"title":2654,"path":2655,"stem":2656},{"title":2660,"path":2661,"stem":2662},"Системні бази даних MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsystem-databases","06.databases\u002F02.ms-sql-server-start\u002F03.system-databases",{"title":2664,"path":2665,"stem":2666},"Огляд мови SQL та запитів","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-queries-overview","06.databases\u002F02.ms-sql-server-start\u002F04.sql-queries-overview",{"title":2668,"icon":2610,"path":2669,"stem":2670,"children":2671,"page":59},"SQL","\u002Fdatabases\u002Fsql","06.databases\u002F03.sql",[2672,2676,2680,2684,2688,2692,2696,2700],{"title":2673,"path":2674,"stem":2675},"Налаштування демонстраційної бази даних","\u002Fdatabases\u002Fsql\u002Fsample-database-setup","06.databases\u002F03.sql\u002F00.sample-database-setup",{"title":2677,"path":2678,"stem":2679},"DDL - Створення таблиць (CREATE TABLE)","\u002Fdatabases\u002Fsql\u002Fddl-create-table","06.databases\u002F03.sql\u002F01.ddl-create-table",{"title":2681,"path":2682,"stem":2683},"DDL - Зміна та видалення таблиць (ALTER, DROP)","\u002Fdatabases\u002Fsql\u002Fddl-alter-drop-table","06.databases\u002F03.sql\u002F02.ddl-alter-drop-table",{"title":2685,"path":2686,"stem":2687},"SELECT запити - Основи","\u002Fdatabases\u002Fsql\u002Fselect-queries-fundamentals","06.databases\u002F03.sql\u002F03.select-queries-fundamentals",{"title":2689,"path":2690,"stem":2691},"SELECT запити - Розширені можливості","\u002Fdatabases\u002Fsql\u002Fselect-queries-advanced","06.databases\u002F03.sql\u002F04.select-queries-advanced",{"title":2693,"path":2694,"stem":2695},"INSERT запити - Додавання даних","\u002Fdatabases\u002Fsql\u002Finsert-queries","06.databases\u002F03.sql\u002F05.insert-queries",{"title":2697,"path":2698,"stem":2699},"UPDATE та DELETE запити","\u002Fdatabases\u002Fsql\u002Fupdate-delete-queries","06.databases\u002F03.sql\u002F06.update-delete-queries",{"title":2701,"path":2702,"stem":2703},"Транзакції в SQL","\u002Fdatabases\u002Fsql\u002Ftransactions","06.databases\u002F03.sql\u002F07.transactions",{"title":2705,"icon":2610,"path":2706,"stem":2707,"children":2708,"page":59},"Multi Table Databases","\u002Fdatabases\u002Fmulti-table-databases","06.databases\u002F04.multi-table-databases",[2709,2713,2717,2721,2725,2729],{"title":2710,"path":2711,"stem":2712},"Зв'язки та нормалізація БД","\u002Fdatabases\u002Fmulti-table-databases\u002Frelationships-and-normalization","06.databases\u002F04.multi-table-databases\u002F00.relationships-and-normalization",{"title":2714,"path":2715,"stem":2716},"INNER JOIN - З'єднання таблиць","\u002Fdatabases\u002Fmulti-table-databases\u002Finner-join","06.databases\u002F04.multi-table-databases\u002F01.inner-join",{"title":2718,"path":2719,"stem":2720},"OUTER JOINs - LEFT, RIGHT, FULL","\u002Fdatabases\u002Fmulti-table-databases\u002Fouter-joins","06.databases\u002F04.multi-table-databases\u002F02.outer-joins",{"title":2722,"path":2723,"stem":2724},"CROSS та SELF JOINs","\u002Fdatabases\u002Fmulti-table-databases\u002Fcross-self-joins","06.databases\u002F04.multi-table-databases\u002F03.cross-self-joins",{"title":2726,"path":2727,"stem":2728},"Підзапити (Subqueries)","\u002Fdatabases\u002Fmulti-table-databases\u002Fsubqueries","06.databases\u002F04.multi-table-databases\u002F04.subqueries",{"title":2730,"path":2731,"stem":2732},"Агрегації з JOIN","\u002Fdatabases\u002Fmulti-table-databases\u002Faggregations-with-joins","06.databases\u002F04.multi-table-databases\u002F05.aggregations-with-joins",{"title":2734,"icon":2735,"path":2736,"stem":2737,"children":2738,"page":59},"Aggregate Functions","i-lucide-calculator","\u002Fdatabases\u002Faggregate-functions","06.databases\u002F05.aggregate-functions",[2739,2743,2747],{"title":2740,"path":2741,"stem":2742},"Функції агрегування в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fintroduction-aggregate-functions","06.databases\u002F05.aggregate-functions\u002F01.introduction-aggregate-functions",{"title":2744,"path":2745,"stem":2746},"Групування даних в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fgrouping-data","06.databases\u002F05.aggregate-functions\u002F02.grouping-data",{"title":2748,"path":2749,"stem":2750},"Підзапити з агрегатними функціями","\u002Fdatabases\u002Faggregate-functions\u002Fsubqueries-aggregates","06.databases\u002F05.aggregate-functions\u002F03.subqueries-aggregates",{"title":2752,"icon":2753,"path":2754,"stem":2755,"children":2756,"page":59},"Тригери та зберігаємі процедури","i-lucide-database-zap","\u002Fdatabases\u002Ftriggers-stored-procedures","06.databases\u002F07.triggers-stored-procedures",[2757,2761,2765,2769,2773,2777,2781],{"title":2758,"path":2759,"stem":2760},"DML-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fdml-triggers","06.databases\u002F07.triggers-stored-procedures\u002F01.dml-triggers",{"title":2762,"path":2763,"stem":2764},"DDL-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fddl-triggers","06.databases\u002F07.triggers-stored-procedures\u002F02.ddl-triggers",{"title":2766,"path":2767,"stem":2768},"Transact-SQL розширення","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransact-sql-extensions","06.databases\u002F07.triggers-stored-procedures\u002F03.transact-sql-extensions",{"title":2770,"path":2771,"stem":2772},"Транзакції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransactions","06.databases\u002F07.triggers-stored-procedures\u002F04.transactions",{"title":2774,"path":2775,"stem":2776},"Зберігаємі процедури","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fstored-procedures","06.databases\u002F07.triggers-stored-procedures\u002F05.stored-procedures",{"title":2778,"path":2779,"stem":2780},"Користувацькі функції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fuser-defined-functions","06.databases\u002F07.triggers-stored-procedures\u002F06.user-defined-functions",{"title":2782,"path":2783,"stem":2784},"Безпека баз даних","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fsecurity","06.databases\u002F07.triggers-stored-procedures\u002F08.security",{"title":2782,"icon":793,"path":2786,"stem":2787,"children":2788,"page":59},"\u002Fdatabases\u002Fsecurity","06.databases\u002F08.security",[2789,2793],{"title":2790,"path":2791,"stem":2792},"Вступ до безпеки баз даних","\u002Fdatabases\u002Fsecurity\u002Fintroduction","06.databases\u002F08.security\u002F01.introduction",{"title":2794,"path":2795,"stem":2796},"Системні представлення та метадані","\u002Fdatabases\u002Fsecurity\u002Fsystem-views","06.databases\u002F08.security\u002F02.system-views",{"title":2798,"icon":2799,"path":2800,"stem":2801,"children":2802,"page":59},"Резервне копіювання та відновлення","i-lucide-database-backup","\u002Fdatabases\u002Fbackup-recovery","06.databases\u002F09.backup-recovery",[2803],{"title":2798,"path":2804,"stem":2805},"\u002Fdatabases\u002Fbackup-recovery\u002Fbackup-restore","06.databases\u002F09.backup-recovery\u002F01.backup-restore",{"title":2807,"icon":2808,"path":2809,"stem":2810,"children":2811,"page":59},"Повнотекстовий пошук","i-lucide-search","\u002Fdatabases\u002Ffull-text-search","06.databases\u002F10.full-text-search",[2812],{"title":2807,"path":2813,"stem":2814},"\u002Fdatabases\u002Ffull-text-search\u002Ffull-text-search","06.databases\u002F10.full-text-search\u002F01.full-text-search",{"title":2816,"icon":2817,"path":2818,"stem":2819,"children":2820,"page":59},"Tools","i-lucide-wrench","\u002Ftools","07.tools",[2821,2897],{"title":2822,"icon":2823,"path":2824,"stem":2825,"children":2826},"Docker","i-simple-icons-docker","\u002Ftools\u002Fdocker","07.tools\u002F01.docker\u002Findex",[2827,2829,2833,2837,2841,2845,2849,2853,2857,2861,2865,2869,2873,2877,2881,2885,2889,2893],{"title":2828,"path":2824,"stem":2825},"Docker: від нуля до production",{"title":2830,"path":2831,"stem":2832},"Контейнеризація — від проблеми до рішення","\u002Ftools\u002Fdocker\u002Fcontainerization-concept","07.tools\u002F01.docker\u002F01.containerization-concept",{"title":2834,"path":2835,"stem":2836},"Docker — що це і навіщо?","\u002Ftools\u002Fdocker\u002Fdocker-what-and-why","07.tools\u002F01.docker\u002F02.docker-what-and-why",{"title":2838,"path":2839,"stem":2840},"Архітектура Docker Engine","\u002Ftools\u002Fdocker\u002Fdocker-architecture","07.tools\u002F01.docker\u002F03.docker-architecture",{"title":2842,"path":2843,"stem":2844},"Встановлення Docker","\u002Ftools\u002Fdocker\u002Finstallation","07.tools\u002F01.docker\u002F04.installation",{"title":2846,"path":2847,"stem":2848},"Перший контейнер — docker run","\u002Ftools\u002Fdocker\u002Ffirst-container","07.tools\u002F01.docker\u002F05.first-container",{"title":2850,"path":2851,"stem":2852},"Життєвий цикл контейнера","\u002Ftools\u002Fdocker\u002Fcontainer-lifecycle","07.tools\u002F01.docker\u002F06.container-lifecycle",{"title":2854,"path":2855,"stem":2856},"Docker Images — фундаментальні концепції","\u002Ftools\u002Fdocker\u002Fdocker-images-fundamentals","07.tools\u002F01.docker\u002F07.docker-images-fundamentals",{"title":2858,"path":2859,"stem":2860},"Dockerfile — основи","\u002Ftools\u002Fdocker\u002Fdockerfile-basics","07.tools\u002F01.docker\u002F08.dockerfile-basics",{"title":2862,"path":2863,"stem":2864},"Dockerfile — просунуті техніки","\u002Ftools\u002Fdocker\u002Fdockerfile-advanced","07.tools\u002F01.docker\u002F09.dockerfile-advanced",{"title":2866,"path":2867,"stem":2868},"Build Context та кешування шарів","\u002Ftools\u002Fdocker\u002Fbuild-context-and-cache","07.tools\u002F01.docker\u002F10.build-context-and-cache",{"title":2870,"path":2871,"stem":2872},"Реєстри Docker-образів","\u002Ftools\u002Fdocker\u002Fimage-registries","07.tools\u002F01.docker\u002F11.image-registries",{"title":2874,"path":2875,"stem":2876},"Контейнеризація .NET додатків","\u002Ftools\u002Fdocker\u002Fdotnet-containerization","07.tools\u002F01.docker\u002F12.dotnet-containerization",{"title":2878,"path":2879,"stem":2880},"Томи та збереження даних","\u002Ftools\u002Fdocker\u002Fvolumes-and-data","07.tools\u002F01.docker\u002F13.volumes-and-data",{"title":2882,"path":2883,"stem":2884},"Основи мережі в Docker","\u002Ftools\u002Fdocker\u002Fnetworking-basics","07.tools\u002F01.docker\u002F14.networking-basics",{"title":2886,"path":2887,"stem":2888},"Змінні оточення та конфігурація","\u002Ftools\u002Fdocker\u002Fenvironment-and-configuration","07.tools\u002F01.docker\u002F15.environment-and-configuration",{"title":2890,"path":2891,"stem":2892},"Docker Compose — оркестрація контейнерів","\u002Ftools\u002Fdocker\u002Fdocker-compose-basics","07.tools\u002F01.docker\u002F16.docker-compose-basics",{"title":2894,"path":2895,"stem":2896},"Docker Compose — Multi-Service застосунки","\u002Ftools\u002Fdocker\u002Fcompose-multi-service","07.tools\u002F01.docker\u002F17.compose-multi-service",{"title":2898,"icon":2899,"path":2900,"stem":2901,"children":2902},"Kubernetes","simple-icons:kubernetes","\u002Ftools\u002Fkubernetes","07.tools\u002F02.kubernetes\u002Findex",[2903,2905,2909,2913,2917,2921,2925,2929,2933],{"title":2904,"path":2900,"stem":2901},"Kubernetes: від розробки до production",{"title":2906,"path":2907,"stem":2908},"Kubernetes — коли Docker Compose більше не вистачає","\u002Ftools\u002Fkubernetes\u002Fwhy-kubernetes","07.tools\u002F02.kubernetes\u002F01.why-kubernetes",{"title":2910,"path":2911,"stem":2912},"Архітектура Kubernetes — анатомія кластера","\u002Ftools\u002Fkubernetes\u002Fkubernetes-architecture","07.tools\u002F02.kubernetes\u002F02.kubernetes-architecture",{"title":2914,"path":2915,"stem":2916},"Локальне середовище — minikube, kind та k3s","\u002Ftools\u002Fkubernetes\u002Flocal-environment","07.tools\u002F02.kubernetes\u002F03.local-environment",{"title":2918,"path":2919,"stem":2920},"Pod — атомарна одиниця Kubernetes","\u002Ftools\u002Fkubernetes\u002Fpods-and-containers","07.tools\u002F02.kubernetes\u002F04.pods-and-containers",{"title":2922,"path":2923,"stem":2924},"Патерни використання Pod","\u002Ftools\u002Fkubernetes\u002Fpod-patterns","07.tools\u002F02.kubernetes\u002F05.pod-patterns",{"title":2926,"path":2927,"stem":2928},"Deployment — декларативне управління Pod","\u002Ftools\u002Fkubernetes\u002Fdeployment-basics","07.tools\u002F02.kubernetes\u002F06.deployment-basics",{"title":2930,"path":2931,"stem":2932},"Rolling Updates та управління життєвим циклом Deployment","\u002Ftools\u002Fkubernetes\u002Fdeployment-rolling-updates","07.tools\u002F02.kubernetes\u002F07.deployment-rolling-updates",{"title":2934,"path":2935,"stem":2936},"Service — мережева абстракція для Pod","\u002Ftools\u002Fkubernetes\u002Fservices-networking","07.tools\u002F02.kubernetes\u002F08.services-networking",{"title":2938,"icon":2939,"path":2940,"stem":2941,"children":2942,"page":59},"Software Engineering","i-lucide-code-2","\u002Fsoftware-engineering","09.software-engineering",[2943,2947,2951,2955,2959,2963,2967,2971,2975,2979,2983],{"title":2944,"path":2945,"stem":2946},"1. Аналіз предметної області. Експертні знання та складність","\u002Fsoftware-engineering\u002Fintro-subdomains","09.software-engineering\u002F01.intro-subdomains",{"title":2948,"path":2949,"stem":2950},"2. Обмежені контексти. Інтеграція обмежених контекстів","\u002Fsoftware-engineering\u002Fintegrating-limited-contexts","09.software-engineering\u002F02.integrating-limited-contexts",{"title":2952,"path":2953,"stem":2954},"3. Реалізація простої бізнес-логіки","\u002Fsoftware-engineering\u002Fsimple","09.software-engineering\u002F03.simple",{"title":2956,"path":2957,"stem":2958},"4. Опрацювання складної бізнес-логіки","\u002Fsoftware-engineering\u002Fcomplex-business-logic","09.software-engineering\u002F04.complex-business-logic",{"title":2960,"path":2961,"stem":2962},"5. Моделювання фактора часу. Подієво-орієнтована архітектура.","\u002Fsoftware-engineering\u002Fmodelling-the-time-factor","09.software-engineering\u002F05.modelling-the-time-factor",{"title":2964,"path":2965,"stem":2966},"6. Архітектурні патерни","\u002Fsoftware-engineering\u002Farchitectural-patterns","09.software-engineering\u002F06.architectural-patterns",{"title":2968,"path":2969,"stem":2970},"Паттерни взаємодії","\u002Fsoftware-engineering\u002Fpatterns-of-interaction","09.software-engineering\u002F07.patterns-of-interaction",{"title":2972,"path":2973,"stem":2974},"Евристика проєктування","\u002Fsoftware-engineering\u002Fdesign-heuristics","09.software-engineering\u002F08.design-heuristics",{"title":2976,"path":2977,"stem":2978},"Еволюція проєктних рішень","\u002Fsoftware-engineering\u002Fevolution-of-design-solutions","09.software-engineering\u002F09.evolution-of-design-solutions",{"title":2980,"path":2981,"stem":2982},"EventStorming","\u002Fsoftware-engineering\u002Feventstorming","09.software-engineering\u002F10.eventstorming",{"title":2984,"path":2985,"stem":2986},"DDD на практиці","\u002Fsoftware-engineering\u002Fddd-in-practice","09.software-engineering\u002F11.ddd-in-practice",{"title":2988,"icon":943,"path":2989,"stem":2990,"children":2991,"page":59},"DDD","\u002Fddd","10.ddd",[2992,2996,3000,3004,3008,3012,3016,3020,3024,3028,3032,3036,3040],{"title":2993,"path":2994,"stem":2995},"Аналіз предметної області","\u002Fddd\u002Fdomain-analysis","10.ddd\u002F01.domain-analysis",{"title":2997,"path":2998,"stem":2999},"Експертні знання про предметну область","\u002Fddd\u002Fdomain-expert-knowledge","10.ddd\u002F02.domain-expert-knowledge",{"title":3001,"path":3002,"stem":3003},"Як осмислити складність предметної області","\u002Fddd\u002Fmanaging-domain-complexity","10.ddd\u002F03.managing-domain-complexity",{"title":3005,"path":3006,"stem":3007},"Інтеграція обмежених контекстів","\u002Fddd\u002Fbounded-context-integration","10.ddd\u002F04.bounded-context-integration",{"title":3009,"path":3010,"stem":3011},"Реалізація простої бізнес-логіки","\u002Fddd\u002Fsimple-business-logic","10.ddd\u002F05.simple-business-logic",{"title":3013,"path":3014,"stem":3015},"Обробка складної бізнес-логіки","\u002Fddd\u002Fcomplex-business-logic","10.ddd\u002F06.complex-business-logic",{"title":3017,"path":3018,"stem":3019},"Моделювання фактора часу","\u002Fddd\u002Ftime-modeling","10.ddd\u002F07.time-modeling",{"title":3021,"path":3022,"stem":3023},"Глава 8. Архітектурні Патерни","\u002Fddd\u002Farchitectural-patterns","10.ddd\u002F08.architectural-patterns",{"title":3025,"path":3026,"stem":3027},"Глава 9. Патерни Взаємодії","\u002Fddd\u002Finteraction-patterns","10.ddd\u002F09.interaction-patterns",{"title":3029,"path":3030,"stem":3031},"Глава 10. Проектні Евристики","\u002Fddd\u002Fdesign-heuristics","10.ddd\u002F10.design-heuristics",{"title":3033,"path":3034,"stem":3035},"Глава 11. Еволюція Проектних Рішень","\u002Fddd\u002Fevolution-of-design-decisions","10.ddd\u002F11.evolution-of-design-decisions",{"title":3037,"path":3038,"stem":3039},"Глава 12. EventStorming","\u002Fddd\u002Fevent-storming","10.ddd\u002F12.event-storming",{"title":3041,"path":3042,"stem":3043},"Глава 13. DDD на Практиці","\u002Fddd\u002Fddd-in-practice","10.ddd\u002F13.ddd-in-practice",{"title":3045,"icon":3046,"path":3047,"stem":3048,"children":3049,"page":59},"Media Streaming","i-lucide-video","\u002Fmedia-streaming","11.media-streaming",[3050,3054,3058,3062,3066,3070,3074],{"title":3051,"path":3052,"stem":3053},"01. Магія Стрімінгу: Що відбувається, коли ви натискаєте \"Play\"","\u002Fmedia-streaming\u002Fintroduction","11.media-streaming\u002F01.introduction",{"title":3055,"path":3056,"stem":3057},"02. Анатомія Медіа: Кодеки, Контейнери та Стиснення","\u002Fmedia-streaming\u002Faudio-video-anatomy","11.media-streaming\u002F02.audio-video-anatomy",{"title":3059,"path":3060,"stem":3061},"03. The Gym: FFmpeg Deep Dive","\u002Fmedia-streaming\u002Fffmpeg-gym","11.media-streaming\u002F03.ffmpeg-gym",{"title":3063,"path":3064,"stem":3065},"04. HLS Protocol: HTTP Live Streaming у Деталях","\u002Fmedia-streaming\u002Fhls-protocol","11.media-streaming\u002F04.hls-protocol",{"title":3067,"path":3068,"stem":3069},"05. DASH Protocol: Відкритий Стандарт","\u002Fmedia-streaming\u002Fdash-protocol","11.media-streaming\u002F05.dash-protocol",{"title":3071,"path":3072,"stem":3073},"06. Масштабування: CDN та Adaptive Bitrate","\u002Fmedia-streaming\u002Fcdn-and-adaptive-bitrate","11.media-streaming\u002F06.cdn-and-adaptive-bitrate",{"title":3075,"path":3076,"stem":3077},"07. Війна із Затримкою (Latency)","\u002Fmedia-streaming\u002Frealtime-latency","11.media-streaming\u002F07.realtime-latency",{"title":3079,"icon":3080,"path":3081,"stem":3082,"children":3083,"page":59},"HTML & CSS","i-devicon-html5","\u002Fhtml-css","12.html-css",[3084,3088,3092,3096,3100,3104,3108,3112,3116,3120,3124,3128,3132,3136,3140,3144,3148,3152,3156,3160,3164,3168,3172,3176,3180,3184,3188,3192,3196,3200],{"title":3085,"path":3086,"stem":3087},"Вступ до HTML. Структура документа","\u002Fhtml-css\u002Fintro-html-structure","12.html-css\u002F01.intro-html-structure",{"title":3089,"path":3090,"stem":3091},"Форматування тексту в HTML","\u002Fhtml-css\u002Fhtml-text-formatting","12.html-css\u002F02.html-text-formatting",{"title":3093,"path":3094,"stem":3095},"Посилання та зображення в HTML","\u002Fhtml-css\u002Fhtml-links-images","12.html-css\u002F03.html-links-images",{"title":3097,"path":3098,"stem":3099},"Списки та таблиці в HTML","\u002Fhtml-css\u002Fhtml-lists-tables","12.html-css\u002F04.html-lists-tables",{"title":3101,"path":3102,"stem":3103},"Форми в HTML","\u002Fhtml-css\u002Fhtml-forms","12.html-css\u002F05.html-forms",{"title":3105,"path":3106,"stem":3107},"Семантичні елементи HTML5","\u002Fhtml-css\u002Fhtml-semantic-elements","12.html-css\u002F06.html-semantic-elements",{"title":3109,"path":3110,"stem":3111},"Мультимедіа та розширені елементи HTML","\u002Fhtml-css\u002Fhtml-multimedia-advanced","12.html-css\u002F07.html-multimedia-advanced",{"title":3113,"path":3114,"stem":3115},"Мікророзмітка та SEO в HTML","\u002Fhtml-css\u002Fhtml-microdata-seo","12.html-css\u002F08.html-microdata-seo",{"title":3117,"path":3118,"stem":3119},"Вступ до CSS. Селектори та специфічність","\u002Fhtml-css\u002Fcss-intro-selectors","12.html-css\u002F09.css-intro-selectors",{"title":3121,"path":3122,"stem":3123},"Блокова модель CSS. Відступи. Box Sizing","\u002Fhtml-css\u002Fcss-box-model","12.html-css\u002F10.css-box-model",{"title":3125,"path":3126,"stem":3127},"Розміри у CSS: повний довідник одиниць і ключових слів","\u002Fhtml-css\u002F10a.css-sizing","12.html-css\u002F10a.css-sizing",{"title":3129,"path":3130,"stem":3131},"Типографіка в CSS. Шрифти та текст","\u002Fhtml-css\u002Fcss-typography","12.html-css\u002F11.css-typography",{"title":3133,"path":3134,"stem":3135},"Кольори та фони в CSS","\u002Fhtml-css\u002Fcss-colors-backgrounds","12.html-css\u002F12.css-colors-backgrounds",{"title":3137,"path":3138,"stem":3139},"Тіні та фільтри в CSS","\u002Fhtml-css\u002F12b.css-shadows-filters","12.html-css\u002F12b.css-shadows-filters",{"title":3141,"path":3142,"stem":3143},"CSS Flexbox: Фундамент гнучких макетів","\u002Fhtml-css\u002Fcss-flexbox-fundamentals","12.html-css\u002F13.css-flexbox-fundamentals",{"title":3145,"path":3146,"stem":3147},"CSS Flexbox: Вирівнювання та Позиціонування","\u002Fhtml-css\u002Fcss-flexbox-alignment-sizing-and-patterns","12.html-css\u002F14.css-flexbox-alignment-sizing-and-patterns",{"title":3149,"path":3150,"stem":3151},"CSS Grid. Двовимірний макет. Частина 1","\u002Fhtml-css\u002Fcss-layout-grid","12.html-css\u002F15.css-layout-grid",{"title":3153,"path":3154,"stem":3155},"CSS Grid. Двовимірний макет. Частина 2","\u002Fhtml-css\u002Fcss-layout-grid-advanced","12.html-css\u002F16.css-layout-grid-advanced",{"title":3157,"path":3158,"stem":3159},"Позиціонування в CSS. Z-index. Stacking Context","\u002Fhtml-css\u002Fcss-positioning","12.html-css\u002F17.css-positioning",{"title":3161,"path":3162,"stem":3163},"CSS Анімації та Переходи","\u002Fhtml-css\u002Fcss-animations-transitions","12.html-css\u002F18.css-animations-transitions",{"title":3165,"path":3166,"stem":3167},"Адаптивний дизайн. Media Queries. Частина 1","\u002Fhtml-css\u002Fcss-responsive-media-queries","12.html-css\u002F19.css-responsive-media-queries",{"title":3169,"path":3170,"stem":3171},"Адаптивний дизайн. Частина 2: clamp(), Container Queries, @layer","\u002Fhtml-css\u002Fcss-responsive-advanced","12.html-css\u002F20.css-responsive-advanced",{"title":3173,"path":3174,"stem":3175},"CSS Custom Properties. Методології. Сучасний CSS","\u002Fhtml-css\u002Fcss-variables-methodologies","12.html-css\u002F21.css-variables-methodologies",{"title":3177,"path":3178,"stem":3179},"Сучасний CSS 2023–2025: Нові можливості","\u002Fhtml-css\u002Fcss-modern-features","12.html-css\u002F22.css-modern-features",{"title":3181,"path":3182,"stem":3183},"CSS Nesting, @layer, @scope та @property: нативний препроцесор","\u002Fhtml-css\u002F22a.css-nesting-modern-syntax","12.html-css\u002F22a.css-nesting-modern-syntax",{"title":3185,"path":3186,"stem":3187},"CSS для форм та інтерактивних станів","\u002Fhtml-css\u002Fcss-forms-interactive-states","12.html-css\u002F23.css-forms-interactive-states",{"title":3189,"path":3190,"stem":3191},"Доступність у CSS (CSS Accessibility)","\u002Fhtml-css\u002Fcss-accessibility","12.html-css\u002F24.css-accessibility",{"title":3193,"path":3194,"stem":3195},"CSS-функції та сучасні sizing primitives","\u002Fhtml-css\u002Fcss-functions-sizing","12.html-css\u002F25.css-functions-sizing",{"title":3197,"path":3198,"stem":3199},"Rendering Pipeline і CSS Performance","\u002Fhtml-css\u002Fcss-rendering-performance","12.html-css\u002F26.css-rendering-performance",{"title":3201,"path":3202,"stem":3203},"CSS Best Practices: типові ситуації та правильні рішення","\u002Fhtml-css\u002Fcss-best-practices","12.html-css\u002F27.css-best-practices",{"title":3205,"path":3206,"stem":3207,"children":3208,"page":59},"AWS","\u002Faws","13.aws",[3209,3213,3217,3221,3225,3229,3233,3237,3241,3245,3249,3253,3257,3261,3265,3269,3273,3277],{"title":3210,"path":3211,"stem":3212},"Реєстрація AWS акаунту та студентські програми","\u002Faws\u002Faccount-registration","13.aws\u002F00.account-registration",{"title":3214,"path":3215,"stem":3216},"Вступ до хмарних обчислень та AWS","\u002Faws\u002Fintroduction-to-cloud","13.aws\u002F01.introduction-to-cloud",{"title":3218,"path":3219,"stem":3220},"AWS IAM — Identity and Access Management","\u002Faws\u002Fiam","13.aws\u002F02.iam",{"title":3222,"path":3223,"stem":3224},"AWS IAM CLI — Довідник команд","\u002Faws\u002F02a.iam-doc","13.aws\u002F02a.iam-doc",{"title":3226,"path":3227,"stem":3228},"Docker та контейнеризація в AWS — ECR, ECS та Fargate","\u002Faws\u002Fdocker-ecs","13.aws\u002F03.docker-ecs",{"title":3230,"path":3231,"stem":3232},"AWS ECR \u002F ECS CLI — Довідник команд","\u002Faws\u002F03a.docker-ecs-doc","13.aws\u002F03a.docker-ecs-doc",{"title":3234,"path":3235,"stem":3236},"Amazon EC2 — Elastic Compute Cloud","\u002Faws\u002Fec2","13.aws\u002F04.ec2",{"title":3238,"path":3239,"stem":3240},"AWS EC2 CLI — Довідник команд","\u002Faws\u002F04a.ec2-doc","13.aws\u002F04a.ec2-doc",{"title":3242,"path":3243,"stem":3244},"Elastic Load Balancing та Auto Scaling","\u002Faws\u002Falb-asg","13.aws\u002F05.alb-asg",{"title":3246,"path":3247,"stem":3248},"Amazon S3 — Simple Storage Service","\u002Faws\u002Fs3","13.aws\u002F06.s3",{"title":3250,"path":3251,"stem":3252},"Amazon CloudFront — Content Delivery Network","\u002Faws\u002Fcloudfront","13.aws\u002F07.cloudfront",{"title":3254,"path":3255,"stem":3256},"Amazon RDS — Relational Database Service","\u002Faws\u002Frds","13.aws\u002F08.rds",{"title":3258,"path":3259,"stem":3260},"Amazon DynamoDB — NoSQL Database","\u002Faws\u002Fdynamodb","13.aws\u002F09.dynamodb",{"title":3262,"path":3263,"stem":3264},"AWS Lambda та Serverless Compute","\u002Faws\u002Flambda","13.aws\u002F10.lambda",{"title":3266,"path":3267,"stem":3268},"Amazon Bedrock - Foundation Models, RAG та Agents","\u002Faws\u002Fbedrock","13.aws\u002F22.bedrock",{"title":3270,"path":3271,"stem":3272},"Amazon Rekognition - Комп'ютерний зір","\u002Faws\u002Frekognition","13.aws\u002F23.rekognition",{"title":3274,"path":3275,"stem":3276},"Amazon Textract - Інтелектуальний аналіз документів","\u002Faws\u002Ftextract","13.aws\u002F24.textract",{"title":3278,"path":3279,"stem":3280},"Amazon Polly, Transcribe, Comprehend та Translate","\u002Faws\u002Faudio-nlp-services","13.aws\u002F25.audio-nlp-services",{"title":3282,"path":3283,"stem":3284,"children":3285,"page":59},"Tailwind","\u002Ftailwind","21.tailwind",[3286,3290,3294,3298,3302,3306,3310,3314,3318,3322,3326,3330],{"title":3287,"path":3288,"stem":3289},"Що таке Tailwind CSS і навіщо він потрібен","\u002Ftailwind\u002Ftailwind-intro-philosophy","21.tailwind\u002F01.tailwind-intro-philosophy",{"title":3291,"path":3292,"stem":3293},"Встановлення та налаштування Tailwind CSS v4","\u002Ftailwind\u002Ftailwind-installation-setup","21.tailwind\u002F02.tailwind-installation-setup",{"title":3295,"path":3296,"stem":3297},"Utility-класи: основи та система Tailwind","\u002Ftailwind\u002Ftailwind-utility-classes-core","21.tailwind\u002F03.tailwind-utility-classes-core",{"title":3299,"path":3300,"stem":3301},"Layout: Flexbox та Grid через Tailwind","\u002Ftailwind\u002Ftailwind-flexbox-grid","21.tailwind\u002F04.tailwind-flexbox-grid",{"title":3303,"path":3304,"stem":3305},"Кастомізація теми через @theme у Tailwind v4","\u002Ftailwind\u002Ftailwind-theme-customization","21.tailwind\u002F05.tailwind-theme-customization",{"title":3307,"path":3308,"stem":3309},"Варіанти: hover, focus, responsive, dark mode та нові v4","\u002Ftailwind\u002Ftailwind-variants-states","21.tailwind\u002F06.tailwind-variants-states",{"title":3311,"path":3312,"stem":3313},"Типографіка та система кольорів у Tailwind v4","\u002Ftailwind\u002Ftailwind-typography-colors","21.tailwind\u002F07.tailwind-typography-colors",{"title":3315,"path":3316,"stem":3317},"Компоненти та повторюваність: @apply, @utility та патерни","\u002Ftailwind\u002Ftailwind-components-patterns","21.tailwind\u002F08.tailwind-components-patterns",{"title":3319,"path":3320,"stem":3321},"Темна тема та система дизайн-токенів у Tailwind v4","\u002Ftailwind\u002Ftailwind-dark-mode-theming","21.tailwind\u002F09.tailwind-dark-mode-theming",{"title":3323,"path":3324,"stem":3325},"Довільні значення та контейнерні запити у Tailwind v4","\u002Ftailwind\u002Ftailwind-arbitrary-container-queries","21.tailwind\u002F10.tailwind-arbitrary-container-queries",{"title":3327,"path":3328,"stem":3329},"Анімації, трансформації та 3D у Tailwind v4","\u002Ftailwind\u002Ftailwind-animations-transforms","21.tailwind\u002F11.tailwind-animations-transforms",{"title":3331,"path":3332,"stem":3333},"Tailwind CLI, PostCSS та інтеграція з фреймворками","\u002Ftailwind\u002Ftailwind-cli-tooling","21.tailwind\u002F12.tailwind-cli-tooling",{"title":3335,"path":3336,"stem":3337},"Тестування компонентів діаграм","\u002Ftest-components","98.test-components",{"id":3339,"title":3327,"body":3340,"description":17073,"extension":17074,"links":17075,"meta":17076,"navigation":3778,"path":3328,"seo":17077,"stem":3329,"__hash__":17078},"docs\u002F21.tailwind\u002F11.tailwind-animations-transforms.md",{"type":3341,"value":3342,"toc":17036},"minimark",[3343,3347,3352,3356,3385,3388,3396,3408,3411,3415,3420,3426,3429,3439,3442,3572,3574,3581,3591,3721,3732,3739,3944,3962,3964,3968,3978,4103,4112,4209,4249,4255,4309,4311,4315,4318,5329,5331,5338,5344,5446,5460,5462,5466,5470,5480,5618,5621,5659,5661,5665,5978,5981,6064,6066,6070,6347,6350,6430,6432,6436,6718,6721,6890,6892,6896,7094,7097,7127,7129,7133,7140,7321,7324,7410,9879,9881,9888,9892,9895,9977,10229,10232,11016,11018,11022,11025,11260,11263,11619,11621,11629,11632,12345,12351,12554,13771,13780,13844,13846,13850,13854,13861,13864,14047,14049,14053,14059,14322,14324,14328,14340,14512,14515,15712,15714,15718,15721,16243,16245,16252,16255,16264,16342,16345,16412,16429,16431,16435,16906,16908,16912,16915,17014,17016,17033],[3344,3345,3327],"h1",{"id":3346},"анімації-трансформації-та-3d-у-tailwind-v4",[3348,3349,3351],"h2",{"id":3350},"вступ-чому-анімації-це-не-прикраса-а-комунікація","Вступ: чому анімації — це не прикраса, а комунікація",[3353,3354,3355],"p",{},"Анімації у веб-інтерфейсі — це не «гарні ефекти заради ефектів». Кожна добре спроєктована мікроанімація несе функціональне навантаження:",[3357,3358,3359,3367,3373,3379],"ul",{},[3360,3361,3362,3366],"li",{},[3363,3364,3365],"strong",{},"Hover-ефект на кнопці"," підтверджує, що елемент інтерактивний",[3360,3368,3369,3372],{},[3363,3370,3371],{},"Плавна поява модального вікна"," дає мозку час «зрозуміти», що відбулося",[3360,3374,3375,3378],{},[3363,3376,3377],{},"Анімація завантаження"," знімає тривогу очікування",[3360,3380,3381,3384],{},[3363,3382,3383],{},"3D-перекид картки"," розкриває прихований вміст із просторовим контекстом",[3353,3386,3387],{},"Поганий дизайн анімацій — це анімації заради анімацій: занадто повільні, занадто складні, або такі, що відволікають. Хороший дизайн — непомітний, але відчутний. Ви не думаєте «о, яка гарна анімація» — ви просто почуваєтеся комфортно, користуючись інтерфейсом.",[3353,3389,3390,3391,3395],{},"У цій статті ми розберемо всю систему анімацій та трансформацій Tailwind v4: від базових ",[3392,3393,3394],"code",{},"transition"," до нових 3D-трансформацій, що з'явилися у четвертій версії.",[3397,3398,3399,3400,3403,3404,3407],"note",{},"Частина матеріалу (зокрема, ",[3392,3401,3402],{},"hover:",", ",[3392,3405,3406],{},"focus:"," та інші варіанти) детально розглянута у статті 06. Тут ми зосереджуємося на анімаційній та трансформаційній складовій, не повторюючи варіантний синтаксис.",[3409,3410],"hr",{},[3348,3412,3414],{"id":3413},"частина-і-transitions-плавність-у-кожній-взаємодії","Частина І. Transitions: плавність у кожній взаємодії",[3416,3417,3419],"h3",{"id":3418},"_11-що-таке-css-transition-і-як-tailwind-його-реалізує","1.1. Що таке CSS Transition і як Tailwind його реалізує",[3353,3421,3422,3425],{},[3363,3423,3424],{},"CSS Transition"," — механізм плавної зміни CSS-властивостей з часом. Без transition зміна стилю миттєва. З transition — відбувається за вказану тривалість за вказаною функцією плавності.",[3353,3427,3428],{},"Базова модель:",[3430,3431,3436],"pre",{"className":3432,"code":3434,"language":3435},[3433],"language-text","transition: {властивість} {тривалість} {функція-плавності} {затримка}\n","text",[3392,3437,3434],{"__ignoreMap":3438},"",[3353,3440,3441],{},"Tailwind розбиває це на окремі утиліти:",[3443,3444,3445,3461],"table",{},[3446,3447,3448],"thead",{},[3449,3450,3451,3455,3458],"tr",{},[3452,3453,3454],"th",{},"Група",[3452,3456,3457],{},"Утиліта",[3452,3459,3460],{},"CSS",[3462,3463,3464,3499,3523,3549],"tbody",{},[3449,3465,3466,3472,3494],{},[3467,3468,3469],"td",{},[3363,3470,3471],{},"Що",[3467,3473,3474,3403,3476,3403,3479,3403,3482,3403,3485,3403,3488,3403,3491],{},[3392,3475,3394],{},[3392,3477,3478],{},"transition-colors",[3392,3480,3481],{},"transition-transform",[3392,3483,3484],{},"transition-opacity",[3392,3486,3487],{},"transition-shadow",[3392,3489,3490],{},"transition-all",[3392,3492,3493],{},"transition-none",[3467,3495,3496],{},[3392,3497,3498],{},"transition-property",[3449,3500,3501,3506,3518],{},[3467,3502,3503],{},[3363,3504,3505],{},"Скільки",[3467,3507,3508,3403,3511,3514,3515],{},[3392,3509,3510],{},"duration-75",[3392,3512,3513],{},"duration-100",", ..., ",[3392,3516,3517],{},"duration-1000",[3467,3519,3520],{},[3392,3521,3522],{},"transition-duration",[3449,3524,3525,3530,3544],{},[3467,3526,3527],{},[3363,3528,3529],{},"Як",[3467,3531,3532,3403,3535,3403,3538,3403,3541],{},[3392,3533,3534],{},"ease-linear",[3392,3536,3537],{},"ease-in",[3392,3539,3540],{},"ease-out",[3392,3542,3543],{},"ease-in-out",[3467,3545,3546],{},[3392,3547,3548],{},"transition-timing-function",[3449,3550,3551,3556,3567],{},[3467,3552,3553],{},[3363,3554,3555],{},"Коли",[3467,3557,3558,3403,3561,3514,3564],{},[3392,3559,3560],{},"delay-0",[3392,3562,3563],{},"delay-75",[3392,3565,3566],{},"delay-1000",[3467,3568,3569],{},[3392,3570,3571],{},"transition-delay",[3409,3573],{},[3416,3575,3577,3578,3580],{"id":3576},"_12-клас-transition-що-він-робить-насправді","1.2. Клас ",[3392,3579,3394],{},": що він робить насправді",[3353,3582,3583,3584,3586,3587,3590],{},"Клас ",[3392,3585,3394],{}," — не просто «увімкнути переходи». Він задає ",[3363,3588,3589],{},"конкретний список властивостей",", що будуть анімуватися:",[3430,3592,3596],{"className":3593,"code":3594,"language":3595,"meta":3438,"style":3438},"language-css shiki shiki-themes light-plus dark-plus dark-plus","\u002F* Що генерує клас transition *\u002F\n.transition {\n    transition-property: color, background-color, border-color,\n                         text-decoration-color, fill, stroke,\n                         opacity, box-shadow, transform, filter,\n                         backdrop-filter;\n    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n    transition-duration: 150ms;\n}\n","css",[3392,3597,3598,3607,3618,3635,3652,3658,3664,3701,3715],{"__ignoreMap":3438},[3599,3600,3603],"span",{"class":3601,"line":3602},"line",1,[3599,3604,3606],{"class":3605},"spJ8K","\u002F* Що генерує клас transition *\u002F\n",[3599,3608,3610,3614],{"class":3601,"line":3609},2,[3599,3611,3613],{"class":3612},"sqdDX",".transition",[3599,3615,3617],{"class":3616},"sHH4Y"," {\n",[3599,3619,3621,3625,3628,3632],{"class":3601,"line":3620},3,[3599,3622,3624],{"class":3623},"sa4r_","    transition-property",[3599,3626,3627],{"class":3616},": ",[3599,3629,3631],{"class":3630},"sDUd3","color",[3599,3633,3634],{"class":3616},", background-color, border-color,\n",[3599,3636,3638,3641,3644,3646,3649],{"class":3601,"line":3637},4,[3599,3639,3640],{"class":3616},"                         text-decoration-color, ",[3599,3642,3643],{"class":3630},"fill",[3599,3645,3403],{"class":3616},[3599,3647,3648],{"class":3630},"stroke",[3599,3650,3651],{"class":3616},",\n",[3599,3653,3655],{"class":3601,"line":3654},5,[3599,3656,3657],{"class":3616},"                         opacity, box-shadow, transform, filter,\n",[3599,3659,3661],{"class":3601,"line":3660},6,[3599,3662,3663],{"class":3616},"                         backdrop-filter;\n",[3599,3665,3667,3670,3672,3676,3679,3683,3685,3688,3690,3693,3695,3698],{"class":3601,"line":3666},7,[3599,3668,3669],{"class":3623},"    transition-timing-function",[3599,3671,3627],{"class":3616},[3599,3673,3675],{"class":3674},"s8Opu","cubic-bezier",[3599,3677,3678],{"class":3616},"(",[3599,3680,3682],{"class":3681},"sJj4R","0.4",[3599,3684,3403],{"class":3616},[3599,3686,3687],{"class":3681},"0",[3599,3689,3403],{"class":3616},[3599,3691,3692],{"class":3681},"0.2",[3599,3694,3403],{"class":3616},[3599,3696,3697],{"class":3681},"1",[3599,3699,3700],{"class":3616},");\n",[3599,3702,3704,3707,3709,3712],{"class":3601,"line":3703},8,[3599,3705,3706],{"class":3623},"    transition-duration",[3599,3708,3627],{"class":3616},[3599,3710,3711],{"class":3681},"150ms",[3599,3713,3714],{"class":3616},";\n",[3599,3716,3718],{"class":3601,"line":3717},9,[3599,3719,3720],{"class":3616},"}\n",[3353,3722,3723,3724,3727,3728,3731],{},"Це ",[3363,3725,3726],{},"не"," ",[3392,3729,3730],{},"transition: all"," — це ретельно відібраний набір властивостей, що охоплює 99% UI-потреб і при цьому не навантажує GPU зайвими обчисленнями.",[3353,3733,3734,3735,3738],{},"Порівняємо всі ",[3392,3736,3737],{},"transition-*"," класи:",[3430,3740,3744],{"className":3741,"code":3742,"language":3743,"meta":3438,"style":3438},"language-html shiki shiki-themes light-plus dark-plus dark-plus","\u003C!-- transition — кольори + тіні + трансформації (рекомендований) -->\n\u003Cbutton class=\"transition hover:bg-indigo-700 hover:shadow-lg hover:scale-105\">\n\n\u003C!-- transition-colors — ТІЛЬКИ кольорові властивості -->\n\u003Cbutton class=\"transition-colors hover:bg-indigo-700 hover:text-white\">\n\u003C!-- Корисно: hover:scale-105 НЕ буде анімуватися — немає зайвих обчислень -->\n\n\u003C!-- transition-transform — ТІЛЬКИ transform -->\n\u003Cdiv class=\"transition-transform hover:scale-110 hover:rotate-3\">\n\u003C!-- hover:bg-*  НЕ буде анімуватися -->\n\n\u003C!-- transition-opacity — ТІЛЬКИ opacity -->\n\u003Cdiv class=\"transition-opacity hover:opacity-50\">\n\n\u003C!-- transition-shadow — ТІЛЬКИ box-shadow -->\n\u003Cdiv class=\"transition-shadow hover:shadow-2xl\">\n\n\u003C!-- transition-all — ВСЕ (обережно! дорого для GPU) -->\n\u003Cdiv class=\"transition-all hover:bg-red-500 hover:scale-110 hover:rounded-full\">\n\n\u003C!-- transition-none — вимкнути transition (перевизначити батьківський) -->\n\u003Cbutton class=\"transition-none\">\n","html",[3392,3745,3746,3751,3774,3780,3785,3800,3805,3809,3814,3830,3836,3841,3847,3863,3868,3874,3890,3895,3901,3917,3922,3928],{"__ignoreMap":3438},[3599,3747,3748],{"class":3601,"line":3602},[3599,3749,3750],{"class":3605},"\u003C!-- transition — кольори + тіні + трансформації (рекомендований) -->\n",[3599,3752,3753,3757,3761,3764,3767,3771],{"class":3601,"line":3609},[3599,3754,3756],{"class":3755},"s0P7L","\u003C",[3599,3758,3760],{"class":3759},"sKtos","button",[3599,3762,3763],{"class":3623}," class",[3599,3765,3766],{"class":3616},"=",[3599,3768,3770],{"class":3769},"su9tN","\"transition hover:bg-indigo-700 hover:shadow-lg hover:scale-105\"",[3599,3772,3773],{"class":3755},">\n",[3599,3775,3776],{"class":3601,"line":3620},[3599,3777,3779],{"emptyLinePlaceholder":3778},true,"\n",[3599,3781,3782],{"class":3601,"line":3637},[3599,3783,3784],{"class":3605},"\u003C!-- transition-colors — ТІЛЬКИ кольорові властивості -->\n",[3599,3786,3787,3789,3791,3793,3795,3798],{"class":3601,"line":3654},[3599,3788,3756],{"class":3755},[3599,3790,3760],{"class":3759},[3599,3792,3763],{"class":3623},[3599,3794,3766],{"class":3616},[3599,3796,3797],{"class":3769},"\"transition-colors hover:bg-indigo-700 hover:text-white\"",[3599,3799,3773],{"class":3755},[3599,3801,3802],{"class":3601,"line":3660},[3599,3803,3804],{"class":3605},"\u003C!-- Корисно: hover:scale-105 НЕ буде анімуватися — немає зайвих обчислень -->\n",[3599,3806,3807],{"class":3601,"line":3666},[3599,3808,3779],{"emptyLinePlaceholder":3778},[3599,3810,3811],{"class":3601,"line":3703},[3599,3812,3813],{"class":3605},"\u003C!-- transition-transform — ТІЛЬКИ transform -->\n",[3599,3815,3816,3818,3821,3823,3825,3828],{"class":3601,"line":3717},[3599,3817,3756],{"class":3755},[3599,3819,3820],{"class":3759},"div",[3599,3822,3763],{"class":3623},[3599,3824,3766],{"class":3616},[3599,3826,3827],{"class":3769},"\"transition-transform hover:scale-110 hover:rotate-3\"",[3599,3829,3773],{"class":3755},[3599,3831,3833],{"class":3601,"line":3832},10,[3599,3834,3835],{"class":3605},"\u003C!-- hover:bg-*  НЕ буде анімуватися -->\n",[3599,3837,3839],{"class":3601,"line":3838},11,[3599,3840,3779],{"emptyLinePlaceholder":3778},[3599,3842,3844],{"class":3601,"line":3843},12,[3599,3845,3846],{"class":3605},"\u003C!-- transition-opacity — ТІЛЬКИ opacity -->\n",[3599,3848,3850,3852,3854,3856,3858,3861],{"class":3601,"line":3849},13,[3599,3851,3756],{"class":3755},[3599,3853,3820],{"class":3759},[3599,3855,3763],{"class":3623},[3599,3857,3766],{"class":3616},[3599,3859,3860],{"class":3769},"\"transition-opacity hover:opacity-50\"",[3599,3862,3773],{"class":3755},[3599,3864,3866],{"class":3601,"line":3865},14,[3599,3867,3779],{"emptyLinePlaceholder":3778},[3599,3869,3871],{"class":3601,"line":3870},15,[3599,3872,3873],{"class":3605},"\u003C!-- transition-shadow — ТІЛЬКИ box-shadow -->\n",[3599,3875,3877,3879,3881,3883,3885,3888],{"class":3601,"line":3876},16,[3599,3878,3756],{"class":3755},[3599,3880,3820],{"class":3759},[3599,3882,3763],{"class":3623},[3599,3884,3766],{"class":3616},[3599,3886,3887],{"class":3769},"\"transition-shadow hover:shadow-2xl\"",[3599,3889,3773],{"class":3755},[3599,3891,3893],{"class":3601,"line":3892},17,[3599,3894,3779],{"emptyLinePlaceholder":3778},[3599,3896,3898],{"class":3601,"line":3897},18,[3599,3899,3900],{"class":3605},"\u003C!-- transition-all — ВСЕ (обережно! дорого для GPU) -->\n",[3599,3902,3904,3906,3908,3910,3912,3915],{"class":3601,"line":3903},19,[3599,3905,3756],{"class":3755},[3599,3907,3820],{"class":3759},[3599,3909,3763],{"class":3623},[3599,3911,3766],{"class":3616},[3599,3913,3914],{"class":3769},"\"transition-all hover:bg-red-500 hover:scale-110 hover:rounded-full\"",[3599,3916,3773],{"class":3755},[3599,3918,3920],{"class":3601,"line":3919},20,[3599,3921,3779],{"emptyLinePlaceholder":3778},[3599,3923,3925],{"class":3601,"line":3924},21,[3599,3926,3927],{"class":3605},"\u003C!-- transition-none — вимкнути transition (перевизначити батьківський) -->\n",[3599,3929,3931,3933,3935,3937,3939,3942],{"class":3601,"line":3930},22,[3599,3932,3756],{"class":3755},[3599,3934,3760],{"class":3759},[3599,3936,3763],{"class":3623},[3599,3938,3766],{"class":3616},[3599,3940,3941],{"class":3769},"\"transition-none\"",[3599,3943,3773],{"class":3755},[3945,3946,3947,3949,3950,3953,3954,3956,3957,3403,3959,3961],"warning",{},[3392,3948,3490],{}," анімує ",[3363,3951,3952],{},"кожну"," властивість, що змінилася. Браузер вимушений перевіряти всі властивості на кожному кадрі — це дорого. Для складних компонентів використовуйте ",[3392,3955,3394],{}," (вибіркові властивості) або спеціалізовані класи (",[3392,3958,3478],{},[3392,3960,3481],{},").",[3409,3963],{},[3416,3965,3967],{"id":3966},"_13-duration-та-timing-function-швидкість-і-характер","1.3. Duration та Timing Function: швидкість і характер",[3353,3969,3970,3973,3974,3977],{},[3363,3971,3972],{},"Тривалість"," (",[3392,3975,3976],{},"duration-*",") визначає, скільки часу займає перехід:",[3430,3979,3981],{"className":3741,"code":3980,"language":3743,"meta":3438,"style":3438},"\u003C!-- Шкала duration: 75ms, 100ms, 150ms, 200ms, 300ms, 500ms, 700ms, 1000ms -->\n\u003Cbutton class=\"transition duration-75\">  \u003C!-- блискавично — 75ms -->\n\u003Cbutton class=\"transition duration-150\"> \u003C!-- стандарт — 150ms (default) -->\n\u003Cbutton class=\"transition duration-300\"> \u003C!-- плавно — 300ms -->\n\u003Cbutton class=\"transition duration-700\"> \u003C!-- повільно — 700ms -->\n\u003Cbutton class=\"transition duration-1000\">\u003C!-- дуже повільно — 1s -->\n\n\u003C!-- Довільна тривалість -->\n\u003Cbutton class=\"transition duration-[350ms]\">\n",[3392,3982,3983,3988,4007,4025,4043,4061,4079,4083,4088],{"__ignoreMap":3438},[3599,3984,3985],{"class":3601,"line":3602},[3599,3986,3987],{"class":3605},"\u003C!-- Шкала duration: 75ms, 100ms, 150ms, 200ms, 300ms, 500ms, 700ms, 1000ms -->\n",[3599,3989,3990,3992,3994,3996,3998,4001,4004],{"class":3601,"line":3609},[3599,3991,3756],{"class":3755},[3599,3993,3760],{"class":3759},[3599,3995,3763],{"class":3623},[3599,3997,3766],{"class":3616},[3599,3999,4000],{"class":3769},"\"transition duration-75\"",[3599,4002,4003],{"class":3755},">",[3599,4005,4006],{"class":3605},"  \u003C!-- блискавично — 75ms -->\n",[3599,4008,4009,4011,4013,4015,4017,4020,4022],{"class":3601,"line":3620},[3599,4010,3756],{"class":3755},[3599,4012,3760],{"class":3759},[3599,4014,3763],{"class":3623},[3599,4016,3766],{"class":3616},[3599,4018,4019],{"class":3769},"\"transition duration-150\"",[3599,4021,4003],{"class":3755},[3599,4023,4024],{"class":3605}," \u003C!-- стандарт — 150ms (default) -->\n",[3599,4026,4027,4029,4031,4033,4035,4038,4040],{"class":3601,"line":3637},[3599,4028,3756],{"class":3755},[3599,4030,3760],{"class":3759},[3599,4032,3763],{"class":3623},[3599,4034,3766],{"class":3616},[3599,4036,4037],{"class":3769},"\"transition duration-300\"",[3599,4039,4003],{"class":3755},[3599,4041,4042],{"class":3605}," \u003C!-- плавно — 300ms -->\n",[3599,4044,4045,4047,4049,4051,4053,4056,4058],{"class":3601,"line":3654},[3599,4046,3756],{"class":3755},[3599,4048,3760],{"class":3759},[3599,4050,3763],{"class":3623},[3599,4052,3766],{"class":3616},[3599,4054,4055],{"class":3769},"\"transition duration-700\"",[3599,4057,4003],{"class":3755},[3599,4059,4060],{"class":3605}," \u003C!-- повільно — 700ms -->\n",[3599,4062,4063,4065,4067,4069,4071,4074,4076],{"class":3601,"line":3660},[3599,4064,3756],{"class":3755},[3599,4066,3760],{"class":3759},[3599,4068,3763],{"class":3623},[3599,4070,3766],{"class":3616},[3599,4072,4073],{"class":3769},"\"transition duration-1000\"",[3599,4075,4003],{"class":3755},[3599,4077,4078],{"class":3605},"\u003C!-- дуже повільно — 1s -->\n",[3599,4080,4081],{"class":3601,"line":3666},[3599,4082,3779],{"emptyLinePlaceholder":3778},[3599,4084,4085],{"class":3601,"line":3703},[3599,4086,4087],{"class":3605},"\u003C!-- Довільна тривалість -->\n",[3599,4089,4090,4092,4094,4096,4098,4101],{"class":3601,"line":3717},[3599,4091,3756],{"class":3755},[3599,4093,3760],{"class":3759},[3599,4095,3763],{"class":3623},[3599,4097,3766],{"class":3616},[3599,4099,4100],{"class":3769},"\"transition duration-[350ms]\"",[3599,4102,3773],{"class":3755},[3353,4104,4105,3973,4108,4111],{},[3363,4106,4107],{},"Функції плавності",[3392,4109,4110],{},"ease-*",") визначають характер руху:",[3430,4113,4115],{"className":3741,"code":4114,"language":3743,"meta":3438,"style":3438},"\u003C!-- ease-linear: рівномірно (механічний) -->\n\u003Cdiv class=\"transition ease-linear duration-300 hover:translate-x-4\">\n\n\u003C!-- ease-in: повільний старт, швидкий фінал (елемент \"вилітає\") -->\n\u003Cdiv class=\"transition ease-in duration-300 hover:opacity-0\">\n\n\u003C!-- ease-out: швидкий старт, повільний фінал (елемент \"прилітає\") -->\n\u003Cdiv class=\"transition ease-out duration-300 hover:translate-y-0\">\n\n\u003C!-- ease-in-out: повільний старт і фінал (природний) — DEFAULT -->\n\u003Cdiv class=\"transition ease-in-out duration-300 hover:scale-105\">\n",[3392,4116,4117,4122,4137,4141,4146,4161,4165,4170,4185,4189,4194],{"__ignoreMap":3438},[3599,4118,4119],{"class":3601,"line":3602},[3599,4120,4121],{"class":3605},"\u003C!-- ease-linear: рівномірно (механічний) -->\n",[3599,4123,4124,4126,4128,4130,4132,4135],{"class":3601,"line":3609},[3599,4125,3756],{"class":3755},[3599,4127,3820],{"class":3759},[3599,4129,3763],{"class":3623},[3599,4131,3766],{"class":3616},[3599,4133,4134],{"class":3769},"\"transition ease-linear duration-300 hover:translate-x-4\"",[3599,4136,3773],{"class":3755},[3599,4138,4139],{"class":3601,"line":3620},[3599,4140,3779],{"emptyLinePlaceholder":3778},[3599,4142,4143],{"class":3601,"line":3637},[3599,4144,4145],{"class":3605},"\u003C!-- ease-in: повільний старт, швидкий фінал (елемент \"вилітає\") -->\n",[3599,4147,4148,4150,4152,4154,4156,4159],{"class":3601,"line":3654},[3599,4149,3756],{"class":3755},[3599,4151,3820],{"class":3759},[3599,4153,3763],{"class":3623},[3599,4155,3766],{"class":3616},[3599,4157,4158],{"class":3769},"\"transition ease-in duration-300 hover:opacity-0\"",[3599,4160,3773],{"class":3755},[3599,4162,4163],{"class":3601,"line":3660},[3599,4164,3779],{"emptyLinePlaceholder":3778},[3599,4166,4167],{"class":3601,"line":3666},[3599,4168,4169],{"class":3605},"\u003C!-- ease-out: швидкий старт, повільний фінал (елемент \"прилітає\") -->\n",[3599,4171,4172,4174,4176,4178,4180,4183],{"class":3601,"line":3703},[3599,4173,3756],{"class":3755},[3599,4175,3820],{"class":3759},[3599,4177,3763],{"class":3623},[3599,4179,3766],{"class":3616},[3599,4181,4182],{"class":3769},"\"transition ease-out duration-300 hover:translate-y-0\"",[3599,4184,3773],{"class":3755},[3599,4186,4187],{"class":3601,"line":3717},[3599,4188,3779],{"emptyLinePlaceholder":3778},[3599,4190,4191],{"class":3601,"line":3832},[3599,4192,4193],{"class":3605},"\u003C!-- ease-in-out: повільний старт і фінал (природний) — DEFAULT -->\n",[3599,4195,4196,4198,4200,4202,4204,4207],{"class":3601,"line":3838},[3599,4197,3756],{"class":3755},[3599,4199,3820],{"class":3759},[3599,4201,3763],{"class":3623},[3599,4203,3766],{"class":3616},[3599,4205,4206],{"class":3769},"\"transition ease-in-out duration-300 hover:scale-105\"",[3599,4208,3773],{"class":3755},[4210,4211,4212,4217],"tip",{},[3353,4213,4214],{},[3363,4215,4216],{},"Правило великого пальця для timing functions:",[3357,4218,4219,4229,4237,4243],{},[3360,4220,4221,4222,4225,4226,4228],{},"Елементи, що ",[3363,4223,4224],{},"з'являються"," → ",[3392,4227,3540],{}," (швидко з'являється, плавно зупиняється)",[3360,4230,4221,4231,4225,4234,4236],{},[3363,4232,4233],{},"зникають",[3392,4235,3537],{}," (починає повільно, прискорюється і зникає)",[3360,4238,4239,4240,4242],{},"Загальні UI-зміни → ",[3392,4241,3543],{}," (природне відчуття)",[3360,4244,4245,4246,4248],{},"Прогрес-бари, лоадери → ",[3392,4247,3534],{}," (рівномірний рух)",[3353,4250,4251,4254],{},[3363,4252,4253],{},"Кастомні timing functions"," через довільні значення:",[3430,4256,4258],{"className":3741,"code":4257,"language":3743,"meta":3438,"style":3438},"\u003C!-- Spring-ефект через cubic-bezier -->\n\u003Cdiv class=\"transition ease-[cubic-bezier(0.34,1.56,0.64,1)] duration-500 hover:scale-110\">\n\u003C!-- cubic-bezier(0.34,1.56,0.64,1) = \"spring\" — значення > 1 дає \"перестрибок\" -->\n\n\u003C!-- Більш різкий вхід -->\n\u003Cdiv class=\"transition ease-[cubic-bezier(0.25,0.46,0.45,0.94)] duration-300\">\n",[3392,4259,4260,4265,4280,4285,4289,4294],{"__ignoreMap":3438},[3599,4261,4262],{"class":3601,"line":3602},[3599,4263,4264],{"class":3605},"\u003C!-- Spring-ефект через cubic-bezier -->\n",[3599,4266,4267,4269,4271,4273,4275,4278],{"class":3601,"line":3609},[3599,4268,3756],{"class":3755},[3599,4270,3820],{"class":3759},[3599,4272,3763],{"class":3623},[3599,4274,3766],{"class":3616},[3599,4276,4277],{"class":3769},"\"transition ease-[cubic-bezier(0.34,1.56,0.64,1)] duration-500 hover:scale-110\"",[3599,4279,3773],{"class":3755},[3599,4281,4282],{"class":3601,"line":3620},[3599,4283,4284],{"class":3605},"\u003C!-- cubic-bezier(0.34,1.56,0.64,1) = \"spring\" — значення > 1 дає \"перестрибок\" -->\n",[3599,4286,4287],{"class":3601,"line":3637},[3599,4288,3779],{"emptyLinePlaceholder":3778},[3599,4290,4291],{"class":3601,"line":3654},[3599,4292,4293],{"class":3605},"\u003C!-- Більш різкий вхід -->\n",[3599,4295,4296,4298,4300,4302,4304,4307],{"class":3601,"line":3660},[3599,4297,3756],{"class":3755},[3599,4299,3820],{"class":3759},[3599,4301,3763],{"class":3623},[3599,4303,3766],{"class":3616},[3599,4305,4306],{"class":3769},"\"transition ease-[cubic-bezier(0.25,0.46,0.45,0.94)] duration-300\"",[3599,4308,3773],{"class":3755},[3409,4310],{},[3416,4312,4314],{"id":4313},"_14-практичні-патерни-transitions","1.4. Практичні патерни transitions",[3353,4316,4317],{},"Живий приклад — колекція типових UI-transitions:",[4319,4320,4322],"html-preview",{":tailwind":4321},"true",[3430,4323,4325],{"className":3741,"code":4324,"language":3743,"meta":3438,"style":3438},"\u003Cdiv class=\"p-6 bg-slate-50 space-y-6\" style=\"font-family: system-ui, sans-serif;\">\n\n    \u003C!-- === Кнопки === -->\n    \u003Cdiv>\n        \u003Cp class=\"text-xs font-bold uppercase tracking-widest text-slate-400 mb-3\">Кнопки\u003C\u002Fp>\n        \u003Cdiv class=\"flex flex-wrap gap-3\">\n\n            \u003C!-- Колір + тінь -->\n            \u003Cbutton class=\"px-5 py-2.5 bg-indigo-600 text-white font-semibold rounded-xl text-sm\n                           transition-all duration-200\n                           hover:bg-indigo-700 hover:shadow-lg hover:shadow-indigo-500\u002F30\n                           active:scale-95\">\n                Hover + Shadow\n            \u003C\u002Fbutton>\n\n            \u003C!-- Scale + колір -->\n            \u003Cbutton class=\"px-5 py-2.5 bg-emerald-500 text-white font-semibold rounded-xl text-sm\n                           transition duration-200\n                           hover:scale-105 hover:bg-emerald-600\n                           active:scale-95\">\n                Scale Up\n            \u003C\u002Fbutton>\n\n            \u003C!-- Translate вверх -->\n            \u003Cbutton class=\"px-5 py-2.5 bg-violet-600 text-white font-semibold rounded-xl text-sm\n                           transition-[transform,box-shadow] duration-200\n                           hover:-translate-y-1 hover:shadow-xl hover:shadow-violet-500\u002F30\n                           active:translate-y-0\">\n                Lift Effect\n            \u003C\u002Fbutton>\n\n            \u003C!-- Outline кнопка → заповнена -->\n            \u003Cbutton class=\"px-5 py-2.5 border-2 border-rose-500 text-rose-600 font-semibold rounded-xl text-sm\n                           transition-all duration-200\n                           hover:bg-rose-500 hover:text-white\n                           active:scale-95\">\n                Fill on Hover\n            \u003C\u002Fbutton>\n\n        \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003C!-- === Картки === -->\n    \u003Cdiv>\n        \u003Cp class=\"text-xs font-bold uppercase tracking-widest text-slate-400 mb-3\">Картки\u003C\u002Fp>\n        \u003Cdiv class=\"grid grid-cols-3 gap-3\">\n\n            \u003Cdiv class=\"bg-white rounded-xl p-4 border border-slate-100 shadow-sm\n                        transition-all duration-300\n                        hover:shadow-xl hover:-translate-y-1 hover:border-indigo-100\n                        cursor-pointer group\">\n                \u003Cdiv class=\"size-8 bg-indigo-100 rounded-lg flex items-center justify-center mb-3\n                             transition-transform duration-300 group-hover:scale-110\">\n                    🚀\n                \u003C\u002Fdiv>\n                \u003Cp class=\"text-sm font-bold text-slate-800\">Lift Card\u003C\u002Fp>\n                \u003Cp class=\"text-xs text-slate-400 mt-1\">Підіймається при hover\u003C\u002Fp>\n            \u003C\u002Fdiv>\n\n            \u003Cdiv class=\"bg-white rounded-xl p-4 border border-slate-200\n                        transition-all duration-200\n                        hover:border-emerald-400 hover:shadow-[0_0_0_3px_rgba(52,211,153,0.2)]\n                        cursor-pointer\">\n                \u003Cdiv class=\"size-8 bg-emerald-100 rounded-lg flex items-center justify-center mb-3\">\n                    💎\n                \u003C\u002Fdiv>\n                \u003Cp class=\"text-sm font-bold text-slate-800\">Glow Border\u003C\u002Fp>\n                \u003Cp class=\"text-xs text-slate-400 mt-1\">Ring effect при hover\u003C\u002Fp>\n            \u003C\u002Fdiv>\n\n            \u003Cdiv class=\"bg-gradient-to-br from-slate-50 to-slate-100 rounded-xl p-4 border border-slate-200\n                        transition-all duration-300\n                        hover:from-indigo-50 hover:to-violet-50 hover:border-indigo-200\n                        cursor-pointer\">\n                \u003Cdiv class=\"size-8 bg-white rounded-lg flex items-center justify-center mb-3 shadow-sm\">\n                    🌈\n                \u003C\u002Fdiv>\n                \u003Cp class=\"text-sm font-bold text-slate-800\">Gradient Shift\u003C\u002Fp>\n                \u003Cp class=\"text-xs text-slate-400 mt-1\">Фон змінюється плавно\u003C\u002Fp>\n            \u003C\u002Fdiv>\n\n        \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003C!-- === Input Focus === -->\n    \u003Cdiv>\n        \u003Cp class=\"text-xs font-bold uppercase tracking-widest text-slate-400 mb-3\">Form Focus States\u003C\u002Fp>\n        \u003Cdiv class=\"space-y-3 max-w-xs\">\n            \u003Cinput type=\"text\" placeholder=\"Стандартний input\"\n                   class=\"w-full px-4 py-2.5 border-2 border-slate-200 rounded-xl text-sm\n                          transition-all duration-200\n                          focus:border-indigo-500 focus:shadow-[0_0_0_4px_rgba(99,102,241,0.15)]\n                          focus:outline-none placeholder:text-slate-300\">\n\n            \u003Cinput type=\"text\" placeholder=\"Animated label effect\"\n                   class=\"w-full px-4 py-2.5 border-2 border-slate-200 rounded-xl text-sm\n                          bg-slate-50 transition-all duration-200\n                          focus:border-violet-500 focus:bg-white focus:shadow-[0_0_0_4px_rgba(139,92,246,0.15)]\n                          focus:outline-none placeholder:text-slate-300\">\n        \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n\u003C\u002Fdiv>\n",[3392,4326,4327,4350,4354,4359,4368,4394,4409,4413,4418,4432,4437,4442,4449,4454,4463,4467,4472,4485,4490,4495,4501,4506,4514,4519,4525,4539,4545,4551,4559,4565,4574,4579,4585,4599,4604,4610,4617,4623,4632,4637,4647,4657,4662,4668,4677,4701,4717,4722,4736,4742,4748,4756,4771,4779,4785,4795,4820,4845,4854,4859,4873,4879,4885,4893,4909,4915,4924,4948,4972,4981,4986,5000,5005,5011,5018,5034,5040,5049,5073,5097,5106,5111,5120,5129,5134,5140,5149,5173,5189,5213,5224,5230,5236,5244,5249,5269,5278,5284,5290,5297,5306,5315,5320],{"__ignoreMap":3438},[3599,4328,4329,4331,4333,4335,4337,4340,4343,4345,4348],{"class":3601,"line":3602},[3599,4330,3756],{"class":3755},[3599,4332,3820],{"class":3759},[3599,4334,3763],{"class":3623},[3599,4336,3766],{"class":3616},[3599,4338,4339],{"class":3769},"\"p-6 bg-slate-50 space-y-6\"",[3599,4341,4342],{"class":3623}," style",[3599,4344,3766],{"class":3616},[3599,4346,4347],{"class":3769},"\"font-family: system-ui, sans-serif;\"",[3599,4349,3773],{"class":3755},[3599,4351,4352],{"class":3601,"line":3609},[3599,4353,3779],{"emptyLinePlaceholder":3778},[3599,4355,4356],{"class":3601,"line":3620},[3599,4357,4358],{"class":3605},"    \u003C!-- === Кнопки === -->\n",[3599,4360,4361,4364,4366],{"class":3601,"line":3637},[3599,4362,4363],{"class":3755},"    \u003C",[3599,4365,3820],{"class":3759},[3599,4367,3773],{"class":3755},[3599,4369,4370,4373,4375,4377,4379,4382,4384,4387,4390,4392],{"class":3601,"line":3654},[3599,4371,4372],{"class":3755},"        \u003C",[3599,4374,3353],{"class":3759},[3599,4376,3763],{"class":3623},[3599,4378,3766],{"class":3616},[3599,4380,4381],{"class":3769},"\"text-xs font-bold uppercase tracking-widest text-slate-400 mb-3\"",[3599,4383,4003],{"class":3755},[3599,4385,4386],{"class":3616},"Кнопки",[3599,4388,4389],{"class":3755},"\u003C\u002F",[3599,4391,3353],{"class":3759},[3599,4393,3773],{"class":3755},[3599,4395,4396,4398,4400,4402,4404,4407],{"class":3601,"line":3660},[3599,4397,4372],{"class":3755},[3599,4399,3820],{"class":3759},[3599,4401,3763],{"class":3623},[3599,4403,3766],{"class":3616},[3599,4405,4406],{"class":3769},"\"flex flex-wrap gap-3\"",[3599,4408,3773],{"class":3755},[3599,4410,4411],{"class":3601,"line":3666},[3599,4412,3779],{"emptyLinePlaceholder":3778},[3599,4414,4415],{"class":3601,"line":3703},[3599,4416,4417],{"class":3605},"            \u003C!-- Колір + тінь -->\n",[3599,4419,4420,4423,4425,4427,4429],{"class":3601,"line":3717},[3599,4421,4422],{"class":3755},"            \u003C",[3599,4424,3760],{"class":3759},[3599,4426,3763],{"class":3623},[3599,4428,3766],{"class":3616},[3599,4430,4431],{"class":3769},"\"px-5 py-2.5 bg-indigo-600 text-white font-semibold rounded-xl text-sm\n",[3599,4433,4434],{"class":3601,"line":3832},[3599,4435,4436],{"class":3769},"                           transition-all duration-200\n",[3599,4438,4439],{"class":3601,"line":3838},[3599,4440,4441],{"class":3769},"                           hover:bg-indigo-700 hover:shadow-lg hover:shadow-indigo-500\u002F30\n",[3599,4443,4444,4447],{"class":3601,"line":3843},[3599,4445,4446],{"class":3769},"                           active:scale-95\"",[3599,4448,3773],{"class":3755},[3599,4450,4451],{"class":3601,"line":3849},[3599,4452,4453],{"class":3616},"                Hover + Shadow\n",[3599,4455,4456,4459,4461],{"class":3601,"line":3865},[3599,4457,4458],{"class":3755},"            \u003C\u002F",[3599,4460,3760],{"class":3759},[3599,4462,3773],{"class":3755},[3599,4464,4465],{"class":3601,"line":3870},[3599,4466,3779],{"emptyLinePlaceholder":3778},[3599,4468,4469],{"class":3601,"line":3876},[3599,4470,4471],{"class":3605},"            \u003C!-- Scale + колір -->\n",[3599,4473,4474,4476,4478,4480,4482],{"class":3601,"line":3892},[3599,4475,4422],{"class":3755},[3599,4477,3760],{"class":3759},[3599,4479,3763],{"class":3623},[3599,4481,3766],{"class":3616},[3599,4483,4484],{"class":3769},"\"px-5 py-2.5 bg-emerald-500 text-white font-semibold rounded-xl text-sm\n",[3599,4486,4487],{"class":3601,"line":3897},[3599,4488,4489],{"class":3769},"                           transition duration-200\n",[3599,4491,4492],{"class":3601,"line":3903},[3599,4493,4494],{"class":3769},"                           hover:scale-105 hover:bg-emerald-600\n",[3599,4496,4497,4499],{"class":3601,"line":3919},[3599,4498,4446],{"class":3769},[3599,4500,3773],{"class":3755},[3599,4502,4503],{"class":3601,"line":3924},[3599,4504,4505],{"class":3616},"                Scale Up\n",[3599,4507,4508,4510,4512],{"class":3601,"line":3930},[3599,4509,4458],{"class":3755},[3599,4511,3760],{"class":3759},[3599,4513,3773],{"class":3755},[3599,4515,4517],{"class":3601,"line":4516},23,[3599,4518,3779],{"emptyLinePlaceholder":3778},[3599,4520,4522],{"class":3601,"line":4521},24,[3599,4523,4524],{"class":3605},"            \u003C!-- Translate вверх -->\n",[3599,4526,4528,4530,4532,4534,4536],{"class":3601,"line":4527},25,[3599,4529,4422],{"class":3755},[3599,4531,3760],{"class":3759},[3599,4533,3763],{"class":3623},[3599,4535,3766],{"class":3616},[3599,4537,4538],{"class":3769},"\"px-5 py-2.5 bg-violet-600 text-white font-semibold rounded-xl text-sm\n",[3599,4540,4542],{"class":3601,"line":4541},26,[3599,4543,4544],{"class":3769},"                           transition-[transform,box-shadow] duration-200\n",[3599,4546,4548],{"class":3601,"line":4547},27,[3599,4549,4550],{"class":3769},"                           hover:-translate-y-1 hover:shadow-xl hover:shadow-violet-500\u002F30\n",[3599,4552,4554,4557],{"class":3601,"line":4553},28,[3599,4555,4556],{"class":3769},"                           active:translate-y-0\"",[3599,4558,3773],{"class":3755},[3599,4560,4562],{"class":3601,"line":4561},29,[3599,4563,4564],{"class":3616},"                Lift Effect\n",[3599,4566,4568,4570,4572],{"class":3601,"line":4567},30,[3599,4569,4458],{"class":3755},[3599,4571,3760],{"class":3759},[3599,4573,3773],{"class":3755},[3599,4575,4577],{"class":3601,"line":4576},31,[3599,4578,3779],{"emptyLinePlaceholder":3778},[3599,4580,4582],{"class":3601,"line":4581},32,[3599,4583,4584],{"class":3605},"            \u003C!-- Outline кнопка → заповнена -->\n",[3599,4586,4588,4590,4592,4594,4596],{"class":3601,"line":4587},33,[3599,4589,4422],{"class":3755},[3599,4591,3760],{"class":3759},[3599,4593,3763],{"class":3623},[3599,4595,3766],{"class":3616},[3599,4597,4598],{"class":3769},"\"px-5 py-2.5 border-2 border-rose-500 text-rose-600 font-semibold rounded-xl text-sm\n",[3599,4600,4602],{"class":3601,"line":4601},34,[3599,4603,4436],{"class":3769},[3599,4605,4607],{"class":3601,"line":4606},35,[3599,4608,4609],{"class":3769},"                           hover:bg-rose-500 hover:text-white\n",[3599,4611,4613,4615],{"class":3601,"line":4612},36,[3599,4614,4446],{"class":3769},[3599,4616,3773],{"class":3755},[3599,4618,4620],{"class":3601,"line":4619},37,[3599,4621,4622],{"class":3616},"                Fill on Hover\n",[3599,4624,4626,4628,4630],{"class":3601,"line":4625},38,[3599,4627,4458],{"class":3755},[3599,4629,3760],{"class":3759},[3599,4631,3773],{"class":3755},[3599,4633,4635],{"class":3601,"line":4634},39,[3599,4636,3779],{"emptyLinePlaceholder":3778},[3599,4638,4640,4643,4645],{"class":3601,"line":4639},40,[3599,4641,4642],{"class":3755},"        \u003C\u002F",[3599,4644,3820],{"class":3759},[3599,4646,3773],{"class":3755},[3599,4648,4650,4653,4655],{"class":3601,"line":4649},41,[3599,4651,4652],{"class":3755},"    \u003C\u002F",[3599,4654,3820],{"class":3759},[3599,4656,3773],{"class":3755},[3599,4658,4660],{"class":3601,"line":4659},42,[3599,4661,3779],{"emptyLinePlaceholder":3778},[3599,4663,4665],{"class":3601,"line":4664},43,[3599,4666,4667],{"class":3605},"    \u003C!-- === Картки === -->\n",[3599,4669,4671,4673,4675],{"class":3601,"line":4670},44,[3599,4672,4363],{"class":3755},[3599,4674,3820],{"class":3759},[3599,4676,3773],{"class":3755},[3599,4678,4680,4682,4684,4686,4688,4690,4692,4695,4697,4699],{"class":3601,"line":4679},45,[3599,4681,4372],{"class":3755},[3599,4683,3353],{"class":3759},[3599,4685,3763],{"class":3623},[3599,4687,3766],{"class":3616},[3599,4689,4381],{"class":3769},[3599,4691,4003],{"class":3755},[3599,4693,4694],{"class":3616},"Картки",[3599,4696,4389],{"class":3755},[3599,4698,3353],{"class":3759},[3599,4700,3773],{"class":3755},[3599,4702,4704,4706,4708,4710,4712,4715],{"class":3601,"line":4703},46,[3599,4705,4372],{"class":3755},[3599,4707,3820],{"class":3759},[3599,4709,3763],{"class":3623},[3599,4711,3766],{"class":3616},[3599,4713,4714],{"class":3769},"\"grid grid-cols-3 gap-3\"",[3599,4716,3773],{"class":3755},[3599,4718,4720],{"class":3601,"line":4719},47,[3599,4721,3779],{"emptyLinePlaceholder":3778},[3599,4723,4725,4727,4729,4731,4733],{"class":3601,"line":4724},48,[3599,4726,4422],{"class":3755},[3599,4728,3820],{"class":3759},[3599,4730,3763],{"class":3623},[3599,4732,3766],{"class":3616},[3599,4734,4735],{"class":3769},"\"bg-white rounded-xl p-4 border border-slate-100 shadow-sm\n",[3599,4737,4739],{"class":3601,"line":4738},49,[3599,4740,4741],{"class":3769},"                        transition-all duration-300\n",[3599,4743,4745],{"class":3601,"line":4744},50,[3599,4746,4747],{"class":3769},"                        hover:shadow-xl hover:-translate-y-1 hover:border-indigo-100\n",[3599,4749,4751,4754],{"class":3601,"line":4750},51,[3599,4752,4753],{"class":3769},"                        cursor-pointer group\"",[3599,4755,3773],{"class":3755},[3599,4757,4759,4762,4764,4766,4768],{"class":3601,"line":4758},52,[3599,4760,4761],{"class":3755},"                \u003C",[3599,4763,3820],{"class":3759},[3599,4765,3763],{"class":3623},[3599,4767,3766],{"class":3616},[3599,4769,4770],{"class":3769},"\"size-8 bg-indigo-100 rounded-lg flex items-center justify-center mb-3\n",[3599,4772,4774,4777],{"class":3601,"line":4773},53,[3599,4775,4776],{"class":3769},"                             transition-transform duration-300 group-hover:scale-110\"",[3599,4778,3773],{"class":3755},[3599,4780,4782],{"class":3601,"line":4781},54,[3599,4783,4784],{"class":3616},"                    🚀\n",[3599,4786,4788,4791,4793],{"class":3601,"line":4787},55,[3599,4789,4790],{"class":3755},"                \u003C\u002F",[3599,4792,3820],{"class":3759},[3599,4794,3773],{"class":3755},[3599,4796,4798,4800,4802,4804,4806,4809,4811,4814,4816,4818],{"class":3601,"line":4797},56,[3599,4799,4761],{"class":3755},[3599,4801,3353],{"class":3759},[3599,4803,3763],{"class":3623},[3599,4805,3766],{"class":3616},[3599,4807,4808],{"class":3769},"\"text-sm font-bold text-slate-800\"",[3599,4810,4003],{"class":3755},[3599,4812,4813],{"class":3616},"Lift Card",[3599,4815,4389],{"class":3755},[3599,4817,3353],{"class":3759},[3599,4819,3773],{"class":3755},[3599,4821,4823,4825,4827,4829,4831,4834,4836,4839,4841,4843],{"class":3601,"line":4822},57,[3599,4824,4761],{"class":3755},[3599,4826,3353],{"class":3759},[3599,4828,3763],{"class":3623},[3599,4830,3766],{"class":3616},[3599,4832,4833],{"class":3769},"\"text-xs text-slate-400 mt-1\"",[3599,4835,4003],{"class":3755},[3599,4837,4838],{"class":3616},"Підіймається при hover",[3599,4840,4389],{"class":3755},[3599,4842,3353],{"class":3759},[3599,4844,3773],{"class":3755},[3599,4846,4848,4850,4852],{"class":3601,"line":4847},58,[3599,4849,4458],{"class":3755},[3599,4851,3820],{"class":3759},[3599,4853,3773],{"class":3755},[3599,4855,4857],{"class":3601,"line":4856},59,[3599,4858,3779],{"emptyLinePlaceholder":3778},[3599,4860,4862,4864,4866,4868,4870],{"class":3601,"line":4861},60,[3599,4863,4422],{"class":3755},[3599,4865,3820],{"class":3759},[3599,4867,3763],{"class":3623},[3599,4869,3766],{"class":3616},[3599,4871,4872],{"class":3769},"\"bg-white rounded-xl p-4 border border-slate-200\n",[3599,4874,4876],{"class":3601,"line":4875},61,[3599,4877,4878],{"class":3769},"                        transition-all duration-200\n",[3599,4880,4882],{"class":3601,"line":4881},62,[3599,4883,4884],{"class":3769},"                        hover:border-emerald-400 hover:shadow-[0_0_0_3px_rgba(52,211,153,0.2)]\n",[3599,4886,4888,4891],{"class":3601,"line":4887},63,[3599,4889,4890],{"class":3769},"                        cursor-pointer\"",[3599,4892,3773],{"class":3755},[3599,4894,4896,4898,4900,4902,4904,4907],{"class":3601,"line":4895},64,[3599,4897,4761],{"class":3755},[3599,4899,3820],{"class":3759},[3599,4901,3763],{"class":3623},[3599,4903,3766],{"class":3616},[3599,4905,4906],{"class":3769},"\"size-8 bg-emerald-100 rounded-lg flex items-center justify-center mb-3\"",[3599,4908,3773],{"class":3755},[3599,4910,4912],{"class":3601,"line":4911},65,[3599,4913,4914],{"class":3616},"                    💎\n",[3599,4916,4918,4920,4922],{"class":3601,"line":4917},66,[3599,4919,4790],{"class":3755},[3599,4921,3820],{"class":3759},[3599,4923,3773],{"class":3755},[3599,4925,4927,4929,4931,4933,4935,4937,4939,4942,4944,4946],{"class":3601,"line":4926},67,[3599,4928,4761],{"class":3755},[3599,4930,3353],{"class":3759},[3599,4932,3763],{"class":3623},[3599,4934,3766],{"class":3616},[3599,4936,4808],{"class":3769},[3599,4938,4003],{"class":3755},[3599,4940,4941],{"class":3616},"Glow Border",[3599,4943,4389],{"class":3755},[3599,4945,3353],{"class":3759},[3599,4947,3773],{"class":3755},[3599,4949,4951,4953,4955,4957,4959,4961,4963,4966,4968,4970],{"class":3601,"line":4950},68,[3599,4952,4761],{"class":3755},[3599,4954,3353],{"class":3759},[3599,4956,3763],{"class":3623},[3599,4958,3766],{"class":3616},[3599,4960,4833],{"class":3769},[3599,4962,4003],{"class":3755},[3599,4964,4965],{"class":3616},"Ring effect при hover",[3599,4967,4389],{"class":3755},[3599,4969,3353],{"class":3759},[3599,4971,3773],{"class":3755},[3599,4973,4975,4977,4979],{"class":3601,"line":4974},69,[3599,4976,4458],{"class":3755},[3599,4978,3820],{"class":3759},[3599,4980,3773],{"class":3755},[3599,4982,4984],{"class":3601,"line":4983},70,[3599,4985,3779],{"emptyLinePlaceholder":3778},[3599,4987,4989,4991,4993,4995,4997],{"class":3601,"line":4988},71,[3599,4990,4422],{"class":3755},[3599,4992,3820],{"class":3759},[3599,4994,3763],{"class":3623},[3599,4996,3766],{"class":3616},[3599,4998,4999],{"class":3769},"\"bg-gradient-to-br from-slate-50 to-slate-100 rounded-xl p-4 border border-slate-200\n",[3599,5001,5003],{"class":3601,"line":5002},72,[3599,5004,4741],{"class":3769},[3599,5006,5008],{"class":3601,"line":5007},73,[3599,5009,5010],{"class":3769},"                        hover:from-indigo-50 hover:to-violet-50 hover:border-indigo-200\n",[3599,5012,5014,5016],{"class":3601,"line":5013},74,[3599,5015,4890],{"class":3769},[3599,5017,3773],{"class":3755},[3599,5019,5021,5023,5025,5027,5029,5032],{"class":3601,"line":5020},75,[3599,5022,4761],{"class":3755},[3599,5024,3820],{"class":3759},[3599,5026,3763],{"class":3623},[3599,5028,3766],{"class":3616},[3599,5030,5031],{"class":3769},"\"size-8 bg-white rounded-lg flex items-center justify-center mb-3 shadow-sm\"",[3599,5033,3773],{"class":3755},[3599,5035,5037],{"class":3601,"line":5036},76,[3599,5038,5039],{"class":3616},"                    🌈\n",[3599,5041,5043,5045,5047],{"class":3601,"line":5042},77,[3599,5044,4790],{"class":3755},[3599,5046,3820],{"class":3759},[3599,5048,3773],{"class":3755},[3599,5050,5052,5054,5056,5058,5060,5062,5064,5067,5069,5071],{"class":3601,"line":5051},78,[3599,5053,4761],{"class":3755},[3599,5055,3353],{"class":3759},[3599,5057,3763],{"class":3623},[3599,5059,3766],{"class":3616},[3599,5061,4808],{"class":3769},[3599,5063,4003],{"class":3755},[3599,5065,5066],{"class":3616},"Gradient Shift",[3599,5068,4389],{"class":3755},[3599,5070,3353],{"class":3759},[3599,5072,3773],{"class":3755},[3599,5074,5076,5078,5080,5082,5084,5086,5088,5091,5093,5095],{"class":3601,"line":5075},79,[3599,5077,4761],{"class":3755},[3599,5079,3353],{"class":3759},[3599,5081,3763],{"class":3623},[3599,5083,3766],{"class":3616},[3599,5085,4833],{"class":3769},[3599,5087,4003],{"class":3755},[3599,5089,5090],{"class":3616},"Фон змінюється плавно",[3599,5092,4389],{"class":3755},[3599,5094,3353],{"class":3759},[3599,5096,3773],{"class":3755},[3599,5098,5100,5102,5104],{"class":3601,"line":5099},80,[3599,5101,4458],{"class":3755},[3599,5103,3820],{"class":3759},[3599,5105,3773],{"class":3755},[3599,5107,5109],{"class":3601,"line":5108},81,[3599,5110,3779],{"emptyLinePlaceholder":3778},[3599,5112,5114,5116,5118],{"class":3601,"line":5113},82,[3599,5115,4642],{"class":3755},[3599,5117,3820],{"class":3759},[3599,5119,3773],{"class":3755},[3599,5121,5123,5125,5127],{"class":3601,"line":5122},83,[3599,5124,4652],{"class":3755},[3599,5126,3820],{"class":3759},[3599,5128,3773],{"class":3755},[3599,5130,5132],{"class":3601,"line":5131},84,[3599,5133,3779],{"emptyLinePlaceholder":3778},[3599,5135,5137],{"class":3601,"line":5136},85,[3599,5138,5139],{"class":3605},"    \u003C!-- === Input Focus === -->\n",[3599,5141,5143,5145,5147],{"class":3601,"line":5142},86,[3599,5144,4363],{"class":3755},[3599,5146,3820],{"class":3759},[3599,5148,3773],{"class":3755},[3599,5150,5152,5154,5156,5158,5160,5162,5164,5167,5169,5171],{"class":3601,"line":5151},87,[3599,5153,4372],{"class":3755},[3599,5155,3353],{"class":3759},[3599,5157,3763],{"class":3623},[3599,5159,3766],{"class":3616},[3599,5161,4381],{"class":3769},[3599,5163,4003],{"class":3755},[3599,5165,5166],{"class":3616},"Form Focus States",[3599,5168,4389],{"class":3755},[3599,5170,3353],{"class":3759},[3599,5172,3773],{"class":3755},[3599,5174,5176,5178,5180,5182,5184,5187],{"class":3601,"line":5175},88,[3599,5177,4372],{"class":3755},[3599,5179,3820],{"class":3759},[3599,5181,3763],{"class":3623},[3599,5183,3766],{"class":3616},[3599,5185,5186],{"class":3769},"\"space-y-3 max-w-xs\"",[3599,5188,3773],{"class":3755},[3599,5190,5192,5194,5197,5200,5202,5205,5208,5210],{"class":3601,"line":5191},89,[3599,5193,4422],{"class":3755},[3599,5195,5196],{"class":3759},"input",[3599,5198,5199],{"class":3623}," type",[3599,5201,3766],{"class":3616},[3599,5203,5204],{"class":3769},"\"text\"",[3599,5206,5207],{"class":3623}," placeholder",[3599,5209,3766],{"class":3616},[3599,5211,5212],{"class":3769},"\"Стандартний input\"\n",[3599,5214,5216,5219,5221],{"class":3601,"line":5215},90,[3599,5217,5218],{"class":3623},"                   class",[3599,5220,3766],{"class":3616},[3599,5222,5223],{"class":3769},"\"w-full px-4 py-2.5 border-2 border-slate-200 rounded-xl text-sm\n",[3599,5225,5227],{"class":3601,"line":5226},91,[3599,5228,5229],{"class":3769},"                          transition-all duration-200\n",[3599,5231,5233],{"class":3601,"line":5232},92,[3599,5234,5235],{"class":3769},"                          focus:border-indigo-500 focus:shadow-[0_0_0_4px_rgba(99,102,241,0.15)]\n",[3599,5237,5239,5242],{"class":3601,"line":5238},93,[3599,5240,5241],{"class":3769},"                          focus:outline-none placeholder:text-slate-300\"",[3599,5243,3773],{"class":3755},[3599,5245,5247],{"class":3601,"line":5246},94,[3599,5248,3779],{"emptyLinePlaceholder":3778},[3599,5250,5252,5254,5256,5258,5260,5262,5264,5266],{"class":3601,"line":5251},95,[3599,5253,4422],{"class":3755},[3599,5255,5196],{"class":3759},[3599,5257,5199],{"class":3623},[3599,5259,3766],{"class":3616},[3599,5261,5204],{"class":3769},[3599,5263,5207],{"class":3623},[3599,5265,3766],{"class":3616},[3599,5267,5268],{"class":3769},"\"Animated label effect\"\n",[3599,5270,5272,5274,5276],{"class":3601,"line":5271},96,[3599,5273,5218],{"class":3623},[3599,5275,3766],{"class":3616},[3599,5277,5223],{"class":3769},[3599,5279,5281],{"class":3601,"line":5280},97,[3599,5282,5283],{"class":3769},"                          bg-slate-50 transition-all duration-200\n",[3599,5285,5287],{"class":3601,"line":5286},98,[3599,5288,5289],{"class":3769},"                          focus:border-violet-500 focus:bg-white focus:shadow-[0_0_0_4px_rgba(139,92,246,0.15)]\n",[3599,5291,5293,5295],{"class":3601,"line":5292},99,[3599,5294,5241],{"class":3769},[3599,5296,3773],{"class":3755},[3599,5298,5300,5302,5304],{"class":3601,"line":5299},100,[3599,5301,4642],{"class":3755},[3599,5303,3820],{"class":3759},[3599,5305,3773],{"class":3755},[3599,5307,5309,5311,5313],{"class":3601,"line":5308},101,[3599,5310,4652],{"class":3755},[3599,5312,3820],{"class":3759},[3599,5314,3773],{"class":3755},[3599,5316,5318],{"class":3601,"line":5317},102,[3599,5319,3779],{"emptyLinePlaceholder":3778},[3599,5321,5323,5325,5327],{"class":3601,"line":5322},103,[3599,5324,4389],{"class":3755},[3599,5326,3820],{"class":3759},[3599,5328,3773],{"class":3755},[3409,5330],{},[3416,5332,5334,5335],{"id":5333},"_15-transition-з-will-change","1.5. Transition з ",[3392,5336,5337],{},"will-change",[3353,5339,5340,5341,5343],{},"Для компонентів із частими анімаціями (нескінченні, або що починаються одразу при завантаженні) варто підказати браузеру наперед виділити GPU-ресурси через ",[3392,5342,5337],{},":",[3430,5345,5347],{"className":3741,"code":5346,"language":3743,"meta":3438,"style":3438},"\u003C!-- Підказка браузеру: цей елемент буде трансформуватися -->\n\u003Cdiv class=\"will-change-transform transition-transform duration-300 hover:scale-105\">\n\n\u003C!-- Підказка для opacity -->\n\u003Cdiv class=\"will-change-[opacity] transition-opacity duration-500\">\n\n\u003C!-- Підказка для кількох властивостей -->\n\u003Cdiv class=\"will-change-[transform,opacity] transition duration-300\">\n\n\u003C!-- Скасувати will-change після анімації (через JS або після навантаження) -->\n\u003C!-- Tailwind: will-change-auto -->\n\u003Cdiv class=\"will-change-auto\">\n",[3392,5348,5349,5354,5369,5373,5378,5393,5397,5402,5417,5421,5426,5431],{"__ignoreMap":3438},[3599,5350,5351],{"class":3601,"line":3602},[3599,5352,5353],{"class":3605},"\u003C!-- Підказка браузеру: цей елемент буде трансформуватися -->\n",[3599,5355,5356,5358,5360,5362,5364,5367],{"class":3601,"line":3609},[3599,5357,3756],{"class":3755},[3599,5359,3820],{"class":3759},[3599,5361,3763],{"class":3623},[3599,5363,3766],{"class":3616},[3599,5365,5366],{"class":3769},"\"will-change-transform transition-transform duration-300 hover:scale-105\"",[3599,5368,3773],{"class":3755},[3599,5370,5371],{"class":3601,"line":3620},[3599,5372,3779],{"emptyLinePlaceholder":3778},[3599,5374,5375],{"class":3601,"line":3637},[3599,5376,5377],{"class":3605},"\u003C!-- Підказка для opacity -->\n",[3599,5379,5380,5382,5384,5386,5388,5391],{"class":3601,"line":3654},[3599,5381,3756],{"class":3755},[3599,5383,3820],{"class":3759},[3599,5385,3763],{"class":3623},[3599,5387,3766],{"class":3616},[3599,5389,5390],{"class":3769},"\"will-change-[opacity] transition-opacity duration-500\"",[3599,5392,3773],{"class":3755},[3599,5394,5395],{"class":3601,"line":3660},[3599,5396,3779],{"emptyLinePlaceholder":3778},[3599,5398,5399],{"class":3601,"line":3666},[3599,5400,5401],{"class":3605},"\u003C!-- Підказка для кількох властивостей -->\n",[3599,5403,5404,5406,5408,5410,5412,5415],{"class":3601,"line":3703},[3599,5405,3756],{"class":3755},[3599,5407,3820],{"class":3759},[3599,5409,3763],{"class":3623},[3599,5411,3766],{"class":3616},[3599,5413,5414],{"class":3769},"\"will-change-[transform,opacity] transition duration-300\"",[3599,5416,3773],{"class":3755},[3599,5418,5419],{"class":3601,"line":3717},[3599,5420,3779],{"emptyLinePlaceholder":3778},[3599,5422,5423],{"class":3601,"line":3832},[3599,5424,5425],{"class":3605},"\u003C!-- Скасувати will-change після анімації (через JS або після навантаження) -->\n",[3599,5427,5428],{"class":3601,"line":3838},[3599,5429,5430],{"class":3605},"\u003C!-- Tailwind: will-change-auto -->\n",[3599,5432,5433,5435,5437,5439,5441,5444],{"class":3601,"line":3843},[3599,5434,3756],{"class":3755},[3599,5436,3820],{"class":3759},[3599,5438,3763],{"class":3623},[3599,5440,3766],{"class":3616},[3599,5442,5443],{"class":3769},"\"will-change-auto\"",[3599,5445,3773],{"class":3755},[5447,5448,5449,5451,5452,5455,5456,5459],"caution",{},[3392,5450,5337],{}," — інструмент оптимізації, не панацея. Зловживання (наприклад, ",[3392,5453,5454],{},"will-change: transform"," на кожному елементі) збільшує споживання пам'яті GPU. Застосовуйте тільки до елементів, що ",[3363,5457,5458],{},"дійсно активно"," анімуються, і знімайте після завершення анімації.",[3409,5461],{},[3348,5463,5465],{"id":5464},"частина-іі-transforms-рух-масштаб-поворот","Частина ІІ. Transforms: рух, масштаб, поворот",[3416,5467,5469],{"id":5468},"_21-як-tailwind-компонує-трансформації","2.1. Як Tailwind компонує трансформації",[3353,5471,5472,5473,5476,5477,5343],{},"У Tailwind трансформації реалізовані через CSS Custom Properties, що дозволяє ",[3363,5474,5475],{},"комбінувати"," різні transform-операції у одному класі ",[3392,5478,5479],{},"transform",[3430,5481,5483],{"className":3593,"code":5482,"language":3595,"meta":3438,"style":3438},"\u002F* Внутрішня реалізація: transform складається з CSS-змінних *\u002F\n.scale-110 {\n    --tw-scale-x: 1.1;\n    --tw-scale-y: 1.1;\n    transform: var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z)\n               var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)\n               translate(var(--tw-translate-x), var(--tw-translate-y));\n}\n",[3392,5484,5485,5490,5497,5509,5520,5557,5587,5614],{"__ignoreMap":3438},[3599,5486,5487],{"class":3601,"line":3602},[3599,5488,5489],{"class":3605},"\u002F* Внутрішня реалізація: transform складається з CSS-змінних *\u002F\n",[3599,5491,5492,5495],{"class":3601,"line":3609},[3599,5493,5494],{"class":3612},".scale-110",[3599,5496,3617],{"class":3616},[3599,5498,5499,5502,5504,5507],{"class":3601,"line":3620},[3599,5500,5501],{"class":3623},"    --tw-scale-x",[3599,5503,3627],{"class":3616},[3599,5505,5506],{"class":3681},"1.1",[3599,5508,3714],{"class":3616},[3599,5510,5511,5514,5516,5518],{"class":3601,"line":3637},[3599,5512,5513],{"class":3623},"    --tw-scale-y",[3599,5515,3627],{"class":3616},[3599,5517,5506],{"class":3681},[3599,5519,3714],{"class":3616},[3599,5521,5522,5525,5527,5530,5532,5535,5538,5540,5542,5545,5547,5549,5551,5554],{"class":3601,"line":3654},[3599,5523,5524],{"class":3623},"    transform",[3599,5526,3627],{"class":3616},[3599,5528,5529],{"class":3674},"var",[3599,5531,3678],{"class":3616},[3599,5533,5534],{"class":3623},"--tw-rotate-x",[3599,5536,5537],{"class":3616},") ",[3599,5539,5529],{"class":3674},[3599,5541,3678],{"class":3616},[3599,5543,5544],{"class":3623},"--tw-rotate-y",[3599,5546,5537],{"class":3616},[3599,5548,5529],{"class":3674},[3599,5550,3678],{"class":3616},[3599,5552,5553],{"class":3623},"--tw-rotate-z",[3599,5555,5556],{"class":3616},")\n",[3599,5558,5559,5562,5564,5567,5569,5571,5573,5576,5578,5580,5582,5585],{"class":3601,"line":3660},[3599,5560,5561],{"class":3674},"               var",[3599,5563,3678],{"class":3616},[3599,5565,5566],{"class":3623},"--tw-scale-x",[3599,5568,5537],{"class":3616},[3599,5570,5529],{"class":3674},[3599,5572,3678],{"class":3616},[3599,5574,5575],{"class":3623},"--tw-scale-y",[3599,5577,5537],{"class":3616},[3599,5579,5529],{"class":3674},[3599,5581,3678],{"class":3616},[3599,5583,5584],{"class":3623},"--tw-scale-z",[3599,5586,5556],{"class":3616},[3599,5588,5589,5592,5594,5596,5598,5601,5604,5606,5608,5611],{"class":3601,"line":3666},[3599,5590,5591],{"class":3674},"               translate",[3599,5593,3678],{"class":3616},[3599,5595,5529],{"class":3674},[3599,5597,3678],{"class":3616},[3599,5599,5600],{"class":3623},"--tw-translate-x",[3599,5602,5603],{"class":3616},"), ",[3599,5605,5529],{"class":3674},[3599,5607,3678],{"class":3616},[3599,5609,5610],{"class":3623},"--tw-translate-y",[3599,5612,5613],{"class":3616},"));\n",[3599,5615,5616],{"class":3601,"line":3703},[3599,5617,3720],{"class":3616},[3353,5619,5620],{},"Завдяки цьому можна комбінувати будь-які трансформації в одному класовому рядку без конфліктів:",[3430,5622,5624],{"className":3741,"code":5623,"language":3743,"meta":3438,"style":3438},"\u003C!-- Всі трансформації разом — коректно поєднуються -->\n\u003Cdiv class=\"hover:scale-105 hover:rotate-3 hover:-translate-y-2 transition-transform duration-300\">\n    Масштаб + поворот + підйом\n\u003C\u002Fdiv>\n",[3392,5625,5626,5631,5646,5651],{"__ignoreMap":3438},[3599,5627,5628],{"class":3601,"line":3602},[3599,5629,5630],{"class":3605},"\u003C!-- Всі трансформації разом — коректно поєднуються -->\n",[3599,5632,5633,5635,5637,5639,5641,5644],{"class":3601,"line":3609},[3599,5634,3756],{"class":3755},[3599,5636,3820],{"class":3759},[3599,5638,3763],{"class":3623},[3599,5640,3766],{"class":3616},[3599,5642,5643],{"class":3769},"\"hover:scale-105 hover:rotate-3 hover:-translate-y-2 transition-transform duration-300\"",[3599,5645,3773],{"class":3755},[3599,5647,5648],{"class":3601,"line":3620},[3599,5649,5650],{"class":3616},"    Масштаб + поворот + підйом\n",[3599,5652,5653,5655,5657],{"class":3601,"line":3637},[3599,5654,4389],{"class":3755},[3599,5656,3820],{"class":3759},[3599,5658,3773],{"class":3755},[3409,5660],{},[3416,5662,5664],{"id":5663},"_22-scale-масштабування","2.2. Scale: масштабування",[3430,5666,5668],{"className":3741,"code":5667,"language":3743,"meta":3438,"style":3438},"\u003C!-- Однакове по X та Y -->\n\u003Cdiv class=\"scale-0\">   \u003C!-- 0% — невидимий -->\n\u003Cdiv class=\"scale-50\">  \u003C!-- 50% -->\n\u003Cdiv class=\"scale-75\">  \u003C!-- 75% -->\n\u003Cdiv class=\"scale-90\">  \u003C!-- 90% -->\n\u003Cdiv class=\"scale-95\">  \u003C!-- 95% — тонке зменшення (active state) -->\n\u003Cdiv class=\"scale-100\"> \u003C!-- 100% — нормальний -->\n\u003Cdiv class=\"scale-105\"> \u003C!-- 105% — тонке збільшення (hover) -->\n\u003Cdiv class=\"scale-110\"> \u003C!-- 110% -->\n\u003Cdiv class=\"scale-125\"> \u003C!-- 125% -->\n\u003Cdiv class=\"scale-150\"> \u003C!-- 150% -->\n\n\u003C!-- Незалежно по осях -->\n\u003Cdiv class=\"scale-x-50\">  \u003C!-- Тільки по горизонталі -->\n\u003Cdiv class=\"scale-y-125\"> \u003C!-- Тільки по вертикалі -->\n\u003Cdiv class=\"scale-x-[-1]\">\u003C!-- Горизонтальне дзеркало -->\n\u003Cdiv class=\"scale-y-[-1]\">\u003C!-- Вертикальне дзеркало (flip) -->\n\n\u003C!-- Довільні значення -->\n\u003Cdiv class=\"scale-[1.02]\"> \u003C!-- Дуже тонке збільшення -->\n\u003Cdiv class=\"hover:scale-[1.015] transition-transform duration-200\">\n",[3392,5669,5670,5675,5693,5711,5729,5747,5765,5783,5801,5819,5837,5855,5859,5864,5882,5900,5918,5936,5940,5945,5963],{"__ignoreMap":3438},[3599,5671,5672],{"class":3601,"line":3602},[3599,5673,5674],{"class":3605},"\u003C!-- Однакове по X та Y -->\n",[3599,5676,5677,5679,5681,5683,5685,5688,5690],{"class":3601,"line":3609},[3599,5678,3756],{"class":3755},[3599,5680,3820],{"class":3759},[3599,5682,3763],{"class":3623},[3599,5684,3766],{"class":3616},[3599,5686,5687],{"class":3769},"\"scale-0\"",[3599,5689,4003],{"class":3755},[3599,5691,5692],{"class":3605},"   \u003C!-- 0% — невидимий -->\n",[3599,5694,5695,5697,5699,5701,5703,5706,5708],{"class":3601,"line":3620},[3599,5696,3756],{"class":3755},[3599,5698,3820],{"class":3759},[3599,5700,3763],{"class":3623},[3599,5702,3766],{"class":3616},[3599,5704,5705],{"class":3769},"\"scale-50\"",[3599,5707,4003],{"class":3755},[3599,5709,5710],{"class":3605},"  \u003C!-- 50% -->\n",[3599,5712,5713,5715,5717,5719,5721,5724,5726],{"class":3601,"line":3637},[3599,5714,3756],{"class":3755},[3599,5716,3820],{"class":3759},[3599,5718,3763],{"class":3623},[3599,5720,3766],{"class":3616},[3599,5722,5723],{"class":3769},"\"scale-75\"",[3599,5725,4003],{"class":3755},[3599,5727,5728],{"class":3605},"  \u003C!-- 75% -->\n",[3599,5730,5731,5733,5735,5737,5739,5742,5744],{"class":3601,"line":3654},[3599,5732,3756],{"class":3755},[3599,5734,3820],{"class":3759},[3599,5736,3763],{"class":3623},[3599,5738,3766],{"class":3616},[3599,5740,5741],{"class":3769},"\"scale-90\"",[3599,5743,4003],{"class":3755},[3599,5745,5746],{"class":3605},"  \u003C!-- 90% -->\n",[3599,5748,5749,5751,5753,5755,5757,5760,5762],{"class":3601,"line":3660},[3599,5750,3756],{"class":3755},[3599,5752,3820],{"class":3759},[3599,5754,3763],{"class":3623},[3599,5756,3766],{"class":3616},[3599,5758,5759],{"class":3769},"\"scale-95\"",[3599,5761,4003],{"class":3755},[3599,5763,5764],{"class":3605},"  \u003C!-- 95% — тонке зменшення (active state) -->\n",[3599,5766,5767,5769,5771,5773,5775,5778,5780],{"class":3601,"line":3666},[3599,5768,3756],{"class":3755},[3599,5770,3820],{"class":3759},[3599,5772,3763],{"class":3623},[3599,5774,3766],{"class":3616},[3599,5776,5777],{"class":3769},"\"scale-100\"",[3599,5779,4003],{"class":3755},[3599,5781,5782],{"class":3605}," \u003C!-- 100% — нормальний -->\n",[3599,5784,5785,5787,5789,5791,5793,5796,5798],{"class":3601,"line":3703},[3599,5786,3756],{"class":3755},[3599,5788,3820],{"class":3759},[3599,5790,3763],{"class":3623},[3599,5792,3766],{"class":3616},[3599,5794,5795],{"class":3769},"\"scale-105\"",[3599,5797,4003],{"class":3755},[3599,5799,5800],{"class":3605}," \u003C!-- 105% — тонке збільшення (hover) -->\n",[3599,5802,5803,5805,5807,5809,5811,5814,5816],{"class":3601,"line":3717},[3599,5804,3756],{"class":3755},[3599,5806,3820],{"class":3759},[3599,5808,3763],{"class":3623},[3599,5810,3766],{"class":3616},[3599,5812,5813],{"class":3769},"\"scale-110\"",[3599,5815,4003],{"class":3755},[3599,5817,5818],{"class":3605}," \u003C!-- 110% -->\n",[3599,5820,5821,5823,5825,5827,5829,5832,5834],{"class":3601,"line":3832},[3599,5822,3756],{"class":3755},[3599,5824,3820],{"class":3759},[3599,5826,3763],{"class":3623},[3599,5828,3766],{"class":3616},[3599,5830,5831],{"class":3769},"\"scale-125\"",[3599,5833,4003],{"class":3755},[3599,5835,5836],{"class":3605}," \u003C!-- 125% -->\n",[3599,5838,5839,5841,5843,5845,5847,5850,5852],{"class":3601,"line":3838},[3599,5840,3756],{"class":3755},[3599,5842,3820],{"class":3759},[3599,5844,3763],{"class":3623},[3599,5846,3766],{"class":3616},[3599,5848,5849],{"class":3769},"\"scale-150\"",[3599,5851,4003],{"class":3755},[3599,5853,5854],{"class":3605}," \u003C!-- 150% -->\n",[3599,5856,5857],{"class":3601,"line":3843},[3599,5858,3779],{"emptyLinePlaceholder":3778},[3599,5860,5861],{"class":3601,"line":3849},[3599,5862,5863],{"class":3605},"\u003C!-- Незалежно по осях -->\n",[3599,5865,5866,5868,5870,5872,5874,5877,5879],{"class":3601,"line":3865},[3599,5867,3756],{"class":3755},[3599,5869,3820],{"class":3759},[3599,5871,3763],{"class":3623},[3599,5873,3766],{"class":3616},[3599,5875,5876],{"class":3769},"\"scale-x-50\"",[3599,5878,4003],{"class":3755},[3599,5880,5881],{"class":3605},"  \u003C!-- Тільки по горизонталі -->\n",[3599,5883,5884,5886,5888,5890,5892,5895,5897],{"class":3601,"line":3870},[3599,5885,3756],{"class":3755},[3599,5887,3820],{"class":3759},[3599,5889,3763],{"class":3623},[3599,5891,3766],{"class":3616},[3599,5893,5894],{"class":3769},"\"scale-y-125\"",[3599,5896,4003],{"class":3755},[3599,5898,5899],{"class":3605}," \u003C!-- Тільки по вертикалі -->\n",[3599,5901,5902,5904,5906,5908,5910,5913,5915],{"class":3601,"line":3876},[3599,5903,3756],{"class":3755},[3599,5905,3820],{"class":3759},[3599,5907,3763],{"class":3623},[3599,5909,3766],{"class":3616},[3599,5911,5912],{"class":3769},"\"scale-x-[-1]\"",[3599,5914,4003],{"class":3755},[3599,5916,5917],{"class":3605},"\u003C!-- Горизонтальне дзеркало -->\n",[3599,5919,5920,5922,5924,5926,5928,5931,5933],{"class":3601,"line":3892},[3599,5921,3756],{"class":3755},[3599,5923,3820],{"class":3759},[3599,5925,3763],{"class":3623},[3599,5927,3766],{"class":3616},[3599,5929,5930],{"class":3769},"\"scale-y-[-1]\"",[3599,5932,4003],{"class":3755},[3599,5934,5935],{"class":3605},"\u003C!-- Вертикальне дзеркало (flip) -->\n",[3599,5937,5938],{"class":3601,"line":3897},[3599,5939,3779],{"emptyLinePlaceholder":3778},[3599,5941,5942],{"class":3601,"line":3903},[3599,5943,5944],{"class":3605},"\u003C!-- Довільні значення -->\n",[3599,5946,5947,5949,5951,5953,5955,5958,5960],{"class":3601,"line":3919},[3599,5948,3756],{"class":3755},[3599,5950,3820],{"class":3759},[3599,5952,3763],{"class":3623},[3599,5954,3766],{"class":3616},[3599,5956,5957],{"class":3769},"\"scale-[1.02]\"",[3599,5959,4003],{"class":3755},[3599,5961,5962],{"class":3605}," \u003C!-- Дуже тонке збільшення -->\n",[3599,5964,5965,5967,5969,5971,5973,5976],{"class":3601,"line":3924},[3599,5966,3756],{"class":3755},[3599,5968,3820],{"class":3759},[3599,5970,3763],{"class":3623},[3599,5972,3766],{"class":3616},[3599,5974,5975],{"class":3769},"\"hover:scale-[1.015] transition-transform duration-200\"",[3599,5977,3773],{"class":3755},[3353,5979,5980],{},"Практичне застосування scale:",[3430,5982,5984],{"className":3741,"code":5983,"language":3743,"meta":3438,"style":3438},"\u003C!-- Active (натискання) — scale 95 -->\n\u003Cbutton class=\"active:scale-95 transition-transform duration-100\">Натисни\u003C\u002Fbutton>\n\n\u003C!-- Hover — scale 105 -->\n\u003Cimg class=\"hover:scale-105 transition-transform duration-300 overflow-hidden rounded-xl\">\n\n\u003C!-- Reveal анімація — від 0 до 100 -->\n\u003Cdiv class=\"scale-0 animate-[scale-in_0.3s_ease-out_forwards]\">\n",[3392,5985,5986,5991,6015,6019,6024,6040,6044,6049],{"__ignoreMap":3438},[3599,5987,5988],{"class":3601,"line":3602},[3599,5989,5990],{"class":3605},"\u003C!-- Active (натискання) — scale 95 -->\n",[3599,5992,5993,5995,5997,5999,6001,6004,6006,6009,6011,6013],{"class":3601,"line":3609},[3599,5994,3756],{"class":3755},[3599,5996,3760],{"class":3759},[3599,5998,3763],{"class":3623},[3599,6000,3766],{"class":3616},[3599,6002,6003],{"class":3769},"\"active:scale-95 transition-transform duration-100\"",[3599,6005,4003],{"class":3755},[3599,6007,6008],{"class":3616},"Натисни",[3599,6010,4389],{"class":3755},[3599,6012,3760],{"class":3759},[3599,6014,3773],{"class":3755},[3599,6016,6017],{"class":3601,"line":3620},[3599,6018,3779],{"emptyLinePlaceholder":3778},[3599,6020,6021],{"class":3601,"line":3637},[3599,6022,6023],{"class":3605},"\u003C!-- Hover — scale 105 -->\n",[3599,6025,6026,6028,6031,6033,6035,6038],{"class":3601,"line":3654},[3599,6027,3756],{"class":3755},[3599,6029,6030],{"class":3759},"img",[3599,6032,3763],{"class":3623},[3599,6034,3766],{"class":3616},[3599,6036,6037],{"class":3769},"\"hover:scale-105 transition-transform duration-300 overflow-hidden rounded-xl\"",[3599,6039,3773],{"class":3755},[3599,6041,6042],{"class":3601,"line":3660},[3599,6043,3779],{"emptyLinePlaceholder":3778},[3599,6045,6046],{"class":3601,"line":3666},[3599,6047,6048],{"class":3605},"\u003C!-- Reveal анімація — від 0 до 100 -->\n",[3599,6050,6051,6053,6055,6057,6059,6062],{"class":3601,"line":3703},[3599,6052,3756],{"class":3755},[3599,6054,3820],{"class":3759},[3599,6056,3763],{"class":3623},[3599,6058,3766],{"class":3616},[3599,6060,6061],{"class":3769},"\"scale-0 animate-[scale-in_0.3s_ease-out_forwards]\"",[3599,6063,3773],{"class":3755},[3409,6065],{},[3416,6067,6069],{"id":6068},"_23-rotate-обертання","2.3. Rotate: обертання",[3430,6071,6073],{"className":3741,"code":6072,"language":3743,"meta":3438,"style":3438},"\u003C!-- Позитивні значення — за годинниковою стрілкою -->\n\u003Cdiv class=\"rotate-0\">   \u003C!-- 0deg -->\n\u003Cdiv class=\"rotate-1\">   \u003C!-- 1deg — ледь помітний нахил -->\n\u003Cdiv class=\"rotate-2\">   \u003C!-- 2deg -->\n\u003Cdiv class=\"rotate-3\">   \u003C!-- 3deg -->\n\u003Cdiv class=\"rotate-6\">   \u003C!-- 6deg -->\n\u003Cdiv class=\"rotate-12\">  \u003C!-- 12deg -->\n\u003Cdiv class=\"rotate-45\">  \u003C!-- 45deg -->\n\u003Cdiv class=\"rotate-90\">  \u003C!-- 90deg -->\n\u003Cdiv class=\"rotate-180\"> \u003C!-- 180deg — перевернутий -->\n\n\u003C!-- Негативні значення — проти годинникової -->\n\u003Cdiv class=\"-rotate-1\">\n\u003Cdiv class=\"-rotate-45\">\n\u003Cdiv class=\"-rotate-90\">\n\n\u003C!-- Довільні значення -->\n\u003Cdiv class=\"rotate-[33deg]\">\n\u003Cdiv class=\"hover:rotate-[360deg] transition-transform duration-700\">\n    \u003C!-- Повне обертання при hover! -->\n\u003C\u002Fdiv>\n",[3392,6074,6075,6080,6098,6116,6134,6152,6170,6188,6206,6224,6242,6246,6251,6266,6281,6296,6300,6304,6319,6334,6339],{"__ignoreMap":3438},[3599,6076,6077],{"class":3601,"line":3602},[3599,6078,6079],{"class":3605},"\u003C!-- Позитивні значення — за годинниковою стрілкою -->\n",[3599,6081,6082,6084,6086,6088,6090,6093,6095],{"class":3601,"line":3609},[3599,6083,3756],{"class":3755},[3599,6085,3820],{"class":3759},[3599,6087,3763],{"class":3623},[3599,6089,3766],{"class":3616},[3599,6091,6092],{"class":3769},"\"rotate-0\"",[3599,6094,4003],{"class":3755},[3599,6096,6097],{"class":3605},"   \u003C!-- 0deg -->\n",[3599,6099,6100,6102,6104,6106,6108,6111,6113],{"class":3601,"line":3620},[3599,6101,3756],{"class":3755},[3599,6103,3820],{"class":3759},[3599,6105,3763],{"class":3623},[3599,6107,3766],{"class":3616},[3599,6109,6110],{"class":3769},"\"rotate-1\"",[3599,6112,4003],{"class":3755},[3599,6114,6115],{"class":3605},"   \u003C!-- 1deg — ледь помітний нахил -->\n",[3599,6117,6118,6120,6122,6124,6126,6129,6131],{"class":3601,"line":3637},[3599,6119,3756],{"class":3755},[3599,6121,3820],{"class":3759},[3599,6123,3763],{"class":3623},[3599,6125,3766],{"class":3616},[3599,6127,6128],{"class":3769},"\"rotate-2\"",[3599,6130,4003],{"class":3755},[3599,6132,6133],{"class":3605},"   \u003C!-- 2deg -->\n",[3599,6135,6136,6138,6140,6142,6144,6147,6149],{"class":3601,"line":3654},[3599,6137,3756],{"class":3755},[3599,6139,3820],{"class":3759},[3599,6141,3763],{"class":3623},[3599,6143,3766],{"class":3616},[3599,6145,6146],{"class":3769},"\"rotate-3\"",[3599,6148,4003],{"class":3755},[3599,6150,6151],{"class":3605},"   \u003C!-- 3deg -->\n",[3599,6153,6154,6156,6158,6160,6162,6165,6167],{"class":3601,"line":3660},[3599,6155,3756],{"class":3755},[3599,6157,3820],{"class":3759},[3599,6159,3763],{"class":3623},[3599,6161,3766],{"class":3616},[3599,6163,6164],{"class":3769},"\"rotate-6\"",[3599,6166,4003],{"class":3755},[3599,6168,6169],{"class":3605},"   \u003C!-- 6deg -->\n",[3599,6171,6172,6174,6176,6178,6180,6183,6185],{"class":3601,"line":3666},[3599,6173,3756],{"class":3755},[3599,6175,3820],{"class":3759},[3599,6177,3763],{"class":3623},[3599,6179,3766],{"class":3616},[3599,6181,6182],{"class":3769},"\"rotate-12\"",[3599,6184,4003],{"class":3755},[3599,6186,6187],{"class":3605},"  \u003C!-- 12deg -->\n",[3599,6189,6190,6192,6194,6196,6198,6201,6203],{"class":3601,"line":3703},[3599,6191,3756],{"class":3755},[3599,6193,3820],{"class":3759},[3599,6195,3763],{"class":3623},[3599,6197,3766],{"class":3616},[3599,6199,6200],{"class":3769},"\"rotate-45\"",[3599,6202,4003],{"class":3755},[3599,6204,6205],{"class":3605},"  \u003C!-- 45deg -->\n",[3599,6207,6208,6210,6212,6214,6216,6219,6221],{"class":3601,"line":3717},[3599,6209,3756],{"class":3755},[3599,6211,3820],{"class":3759},[3599,6213,3763],{"class":3623},[3599,6215,3766],{"class":3616},[3599,6217,6218],{"class":3769},"\"rotate-90\"",[3599,6220,4003],{"class":3755},[3599,6222,6223],{"class":3605},"  \u003C!-- 90deg -->\n",[3599,6225,6226,6228,6230,6232,6234,6237,6239],{"class":3601,"line":3832},[3599,6227,3756],{"class":3755},[3599,6229,3820],{"class":3759},[3599,6231,3763],{"class":3623},[3599,6233,3766],{"class":3616},[3599,6235,6236],{"class":3769},"\"rotate-180\"",[3599,6238,4003],{"class":3755},[3599,6240,6241],{"class":3605}," \u003C!-- 180deg — перевернутий -->\n",[3599,6243,6244],{"class":3601,"line":3838},[3599,6245,3779],{"emptyLinePlaceholder":3778},[3599,6247,6248],{"class":3601,"line":3843},[3599,6249,6250],{"class":3605},"\u003C!-- Негативні значення — проти годинникової -->\n",[3599,6252,6253,6255,6257,6259,6261,6264],{"class":3601,"line":3849},[3599,6254,3756],{"class":3755},[3599,6256,3820],{"class":3759},[3599,6258,3763],{"class":3623},[3599,6260,3766],{"class":3616},[3599,6262,6263],{"class":3769},"\"-rotate-1\"",[3599,6265,3773],{"class":3755},[3599,6267,6268,6270,6272,6274,6276,6279],{"class":3601,"line":3865},[3599,6269,3756],{"class":3755},[3599,6271,3820],{"class":3759},[3599,6273,3763],{"class":3623},[3599,6275,3766],{"class":3616},[3599,6277,6278],{"class":3769},"\"-rotate-45\"",[3599,6280,3773],{"class":3755},[3599,6282,6283,6285,6287,6289,6291,6294],{"class":3601,"line":3870},[3599,6284,3756],{"class":3755},[3599,6286,3820],{"class":3759},[3599,6288,3763],{"class":3623},[3599,6290,3766],{"class":3616},[3599,6292,6293],{"class":3769},"\"-rotate-90\"",[3599,6295,3773],{"class":3755},[3599,6297,6298],{"class":3601,"line":3876},[3599,6299,3779],{"emptyLinePlaceholder":3778},[3599,6301,6302],{"class":3601,"line":3892},[3599,6303,5944],{"class":3605},[3599,6305,6306,6308,6310,6312,6314,6317],{"class":3601,"line":3897},[3599,6307,3756],{"class":3755},[3599,6309,3820],{"class":3759},[3599,6311,3763],{"class":3623},[3599,6313,3766],{"class":3616},[3599,6315,6316],{"class":3769},"\"rotate-[33deg]\"",[3599,6318,3773],{"class":3755},[3599,6320,6321,6323,6325,6327,6329,6332],{"class":3601,"line":3903},[3599,6322,3756],{"class":3755},[3599,6324,3820],{"class":3759},[3599,6326,3763],{"class":3623},[3599,6328,3766],{"class":3616},[3599,6330,6331],{"class":3769},"\"hover:rotate-[360deg] transition-transform duration-700\"",[3599,6333,3773],{"class":3755},[3599,6335,6336],{"class":3601,"line":3919},[3599,6337,6338],{"class":3605},"    \u003C!-- Повне обертання при hover! -->\n",[3599,6340,6341,6343,6345],{"class":3601,"line":3924},[3599,6342,4389],{"class":3755},[3599,6344,3820],{"class":3759},[3599,6346,3773],{"class":3755},[3353,6348,6349],{},"Практичні патерни:",[3430,6351,6353],{"className":3741,"code":6352,"language":3743,"meta":3438,"style":3438},"\u003C!-- Іконка стрілки при розкритті accordion -->\n\u003Csvg class=\"rotate-0 transition-transform duration-200 group-open:rotate-180\">\n\n\u003C!-- Декоративний нахил карток -->\n\u003Cdiv class=\"rotate-2 hover:rotate-0 transition-transform duration-300\">\n\n\u003C!-- Спіннер через анімацію (у CSS) -->\n\u003Cdiv class=\"animate-spin border-2 border-indigo-600 border-t-transparent\n            rounded-full size-5\">\n",[3392,6354,6355,6360,6376,6380,6385,6401,6405,6410,6423],{"__ignoreMap":3438},[3599,6356,6357],{"class":3601,"line":3602},[3599,6358,6359],{"class":3605},"\u003C!-- Іконка стрілки при розкритті accordion -->\n",[3599,6361,6362,6364,6367,6369,6371,6374],{"class":3601,"line":3609},[3599,6363,3756],{"class":3755},[3599,6365,6366],{"class":3759},"svg",[3599,6368,3763],{"class":3623},[3599,6370,3766],{"class":3616},[3599,6372,6373],{"class":3769},"\"rotate-0 transition-transform duration-200 group-open:rotate-180\"",[3599,6375,3773],{"class":3755},[3599,6377,6378],{"class":3601,"line":3620},[3599,6379,3779],{"emptyLinePlaceholder":3778},[3599,6381,6382],{"class":3601,"line":3637},[3599,6383,6384],{"class":3605},"\u003C!-- Декоративний нахил карток -->\n",[3599,6386,6387,6389,6392,6394,6396,6399],{"class":3601,"line":3654},[3599,6388,3756],{"class":3755},[3599,6390,3820],{"class":6391},"se1LK",[3599,6393,3763],{"class":3623},[3599,6395,3766],{"class":3616},[3599,6397,6398],{"class":3769},"\"rotate-2 hover:rotate-0 transition-transform duration-300\"",[3599,6400,3773],{"class":3755},[3599,6402,6403],{"class":3601,"line":3660},[3599,6404,3779],{"emptyLinePlaceholder":3778},[3599,6406,6407],{"class":3601,"line":3666},[3599,6408,6409],{"class":3605},"\u003C!-- Спіннер через анімацію (у CSS) -->\n",[3599,6411,6412,6414,6416,6418,6420],{"class":3601,"line":3703},[3599,6413,3756],{"class":3755},[3599,6415,3820],{"class":6391},[3599,6417,3763],{"class":3623},[3599,6419,3766],{"class":3616},[3599,6421,6422],{"class":3769},"\"animate-spin border-2 border-indigo-600 border-t-transparent\n",[3599,6424,6425,6428],{"class":3601,"line":3717},[3599,6426,6427],{"class":3769},"            rounded-full size-5\"",[3599,6429,3773],{"class":3755},[3409,6431],{},[3416,6433,6435],{"id":6434},"_24-translate-переміщення","2.4. Translate: переміщення",[3430,6437,6439],{"className":3741,"code":6438,"language":3743,"meta":3438,"style":3438},"\u003C!-- По горизонталі (translate-x) -->\n\u003Cdiv class=\"translate-x-0\">   \u003C!-- 0 -->\n\u003Cdiv class=\"translate-x-1\">   \u003C!-- 4px (0.25rem) -->\n\u003Cdiv class=\"translate-x-4\">   \u003C!-- 16px (1rem) -->\n\u003Cdiv class=\"translate-x-full\"> \u003C!-- 100% ширини елемента -->\n\u003Cdiv class=\"translate-x-1\u002F2\">  \u003C!-- 50% ширини — для центрування -->\n\u003Cdiv class=\"-translate-x-1\">  \u003C!-- -4px -->\n\u003Cdiv class=\"-translate-x-full\">\u003C!-- -100% — виїзд за ліву межу -->\n\n\u003C!-- По вертикалі (translate-y) -->\n\u003Cdiv class=\"translate-y-0\">\n\u003Cdiv class=\"-translate-y-1\">  \u003C!-- -4px — підйом вверх -->\n\u003Cdiv class=\"-translate-y-px\"> \u003C!-- -1px — pixel-perfect підйом -->\n\u003Cdiv class=\"translate-y-full\"> \u003C!-- 100% висоти — виїзд вниз -->\n\n\u003C!-- Одночасно по обох осях (v4) -->\n\u003Cdiv class=\"translate-x-4 translate-y-2\">\n\n\u003C!-- Довільні значення -->\n\u003Cdiv class=\"translate-x-[calc(-50%+1rem)]\"> \u003C!-- Точне позиціонування -->\n\u003Cdiv class=\"-translate-y-[3px]\">            \u003C!-- Pixel-perfect -->\n",[3392,6440,6441,6446,6464,6482,6500,6518,6536,6554,6572,6576,6581,6596,6614,6632,6650,6654,6659,6674,6678,6682,6700],{"__ignoreMap":3438},[3599,6442,6443],{"class":3601,"line":3602},[3599,6444,6445],{"class":3605},"\u003C!-- По горизонталі (translate-x) -->\n",[3599,6447,6448,6450,6452,6454,6456,6459,6461],{"class":3601,"line":3609},[3599,6449,3756],{"class":3755},[3599,6451,3820],{"class":3759},[3599,6453,3763],{"class":3623},[3599,6455,3766],{"class":3616},[3599,6457,6458],{"class":3769},"\"translate-x-0\"",[3599,6460,4003],{"class":3755},[3599,6462,6463],{"class":3605},"   \u003C!-- 0 -->\n",[3599,6465,6466,6468,6470,6472,6474,6477,6479],{"class":3601,"line":3620},[3599,6467,3756],{"class":3755},[3599,6469,3820],{"class":3759},[3599,6471,3763],{"class":3623},[3599,6473,3766],{"class":3616},[3599,6475,6476],{"class":3769},"\"translate-x-1\"",[3599,6478,4003],{"class":3755},[3599,6480,6481],{"class":3605},"   \u003C!-- 4px (0.25rem) -->\n",[3599,6483,6484,6486,6488,6490,6492,6495,6497],{"class":3601,"line":3637},[3599,6485,3756],{"class":3755},[3599,6487,3820],{"class":3759},[3599,6489,3763],{"class":3623},[3599,6491,3766],{"class":3616},[3599,6493,6494],{"class":3769},"\"translate-x-4\"",[3599,6496,4003],{"class":3755},[3599,6498,6499],{"class":3605},"   \u003C!-- 16px (1rem) -->\n",[3599,6501,6502,6504,6506,6508,6510,6513,6515],{"class":3601,"line":3654},[3599,6503,3756],{"class":3755},[3599,6505,3820],{"class":3759},[3599,6507,3763],{"class":3623},[3599,6509,3766],{"class":3616},[3599,6511,6512],{"class":3769},"\"translate-x-full\"",[3599,6514,4003],{"class":3755},[3599,6516,6517],{"class":3605}," \u003C!-- 100% ширини елемента -->\n",[3599,6519,6520,6522,6524,6526,6528,6531,6533],{"class":3601,"line":3660},[3599,6521,3756],{"class":3755},[3599,6523,3820],{"class":3759},[3599,6525,3763],{"class":3623},[3599,6527,3766],{"class":3616},[3599,6529,6530],{"class":3769},"\"translate-x-1\u002F2\"",[3599,6532,4003],{"class":3755},[3599,6534,6535],{"class":3605},"  \u003C!-- 50% ширини — для центрування -->\n",[3599,6537,6538,6540,6542,6544,6546,6549,6551],{"class":3601,"line":3666},[3599,6539,3756],{"class":3755},[3599,6541,3820],{"class":3759},[3599,6543,3763],{"class":3623},[3599,6545,3766],{"class":3616},[3599,6547,6548],{"class":3769},"\"-translate-x-1\"",[3599,6550,4003],{"class":3755},[3599,6552,6553],{"class":3605},"  \u003C!-- -4px -->\n",[3599,6555,6556,6558,6560,6562,6564,6567,6569],{"class":3601,"line":3703},[3599,6557,3756],{"class":3755},[3599,6559,3820],{"class":3759},[3599,6561,3763],{"class":3623},[3599,6563,3766],{"class":3616},[3599,6565,6566],{"class":3769},"\"-translate-x-full\"",[3599,6568,4003],{"class":3755},[3599,6570,6571],{"class":3605},"\u003C!-- -100% — виїзд за ліву межу -->\n",[3599,6573,6574],{"class":3601,"line":3717},[3599,6575,3779],{"emptyLinePlaceholder":3778},[3599,6577,6578],{"class":3601,"line":3832},[3599,6579,6580],{"class":3605},"\u003C!-- По вертикалі (translate-y) -->\n",[3599,6582,6583,6585,6587,6589,6591,6594],{"class":3601,"line":3838},[3599,6584,3756],{"class":3755},[3599,6586,3820],{"class":3759},[3599,6588,3763],{"class":3623},[3599,6590,3766],{"class":3616},[3599,6592,6593],{"class":3769},"\"translate-y-0\"",[3599,6595,3773],{"class":3755},[3599,6597,6598,6600,6602,6604,6606,6609,6611],{"class":3601,"line":3843},[3599,6599,3756],{"class":3755},[3599,6601,3820],{"class":3759},[3599,6603,3763],{"class":3623},[3599,6605,3766],{"class":3616},[3599,6607,6608],{"class":3769},"\"-translate-y-1\"",[3599,6610,4003],{"class":3755},[3599,6612,6613],{"class":3605},"  \u003C!-- -4px — підйом вверх -->\n",[3599,6615,6616,6618,6620,6622,6624,6627,6629],{"class":3601,"line":3849},[3599,6617,3756],{"class":3755},[3599,6619,3820],{"class":3759},[3599,6621,3763],{"class":3623},[3599,6623,3766],{"class":3616},[3599,6625,6626],{"class":3769},"\"-translate-y-px\"",[3599,6628,4003],{"class":3755},[3599,6630,6631],{"class":3605}," \u003C!-- -1px — pixel-perfect підйом -->\n",[3599,6633,6634,6636,6638,6640,6642,6645,6647],{"class":3601,"line":3865},[3599,6635,3756],{"class":3755},[3599,6637,3820],{"class":3759},[3599,6639,3763],{"class":3623},[3599,6641,3766],{"class":3616},[3599,6643,6644],{"class":3769},"\"translate-y-full\"",[3599,6646,4003],{"class":3755},[3599,6648,6649],{"class":3605}," \u003C!-- 100% висоти — виїзд вниз -->\n",[3599,6651,6652],{"class":3601,"line":3870},[3599,6653,3779],{"emptyLinePlaceholder":3778},[3599,6655,6656],{"class":3601,"line":3876},[3599,6657,6658],{"class":3605},"\u003C!-- Одночасно по обох осях (v4) -->\n",[3599,6660,6661,6663,6665,6667,6669,6672],{"class":3601,"line":3892},[3599,6662,3756],{"class":3755},[3599,6664,3820],{"class":3759},[3599,6666,3763],{"class":3623},[3599,6668,3766],{"class":3616},[3599,6670,6671],{"class":3769},"\"translate-x-4 translate-y-2\"",[3599,6673,3773],{"class":3755},[3599,6675,6676],{"class":3601,"line":3897},[3599,6677,3779],{"emptyLinePlaceholder":3778},[3599,6679,6680],{"class":3601,"line":3903},[3599,6681,5944],{"class":3605},[3599,6683,6684,6686,6688,6690,6692,6695,6697],{"class":3601,"line":3919},[3599,6685,3756],{"class":3755},[3599,6687,3820],{"class":3759},[3599,6689,3763],{"class":3623},[3599,6691,3766],{"class":3616},[3599,6693,6694],{"class":3769},"\"translate-x-[calc(-50%+1rem)]\"",[3599,6696,4003],{"class":3755},[3599,6698,6699],{"class":3605}," \u003C!-- Точне позиціонування -->\n",[3599,6701,6702,6704,6706,6708,6710,6713,6715],{"class":3601,"line":3924},[3599,6703,3756],{"class":3755},[3599,6705,3820],{"class":3759},[3599,6707,3763],{"class":3623},[3599,6709,3766],{"class":3616},[3599,6711,6712],{"class":3769},"\"-translate-y-[3px]\"",[3599,6714,4003],{"class":3755},[3599,6716,6717],{"class":3605},"            \u003C!-- Pixel-perfect -->\n",[3353,6719,6720],{},"Типові UI-патерни:",[3430,6722,6724],{"className":3741,"code":6723,"language":3743,"meta":3438,"style":3438},"\u003C!-- Toast notification: виїжджає з правого краю -->\n\u003Cdiv class=\"translate-x-full transition-transform duration-300 ease-out\"\n     id=\"toast\">\n    Повідомлення\n\u003C\u002Fdiv>\n\u003C!-- При появі: js → classList.remove('translate-x-full') -->\n\n\u003C!-- Tooltip: з'являється знизу елемента -->\n\u003Cdiv class=\"opacity-0 translate-y-2 transition-all duration-200\n            group-hover:opacity-100 group-hover:translate-y-0\">\n    Підказка\n\u003C\u002Fdiv>\n\n\u003C!-- Hover lift effect -->\n\u003Cdiv class=\"hover:-translate-y-1 hover:shadow-lg transition-all duration-200\">\n    Картка підіймається\n\u003C\u002Fdiv>\n\n\u003C!-- Абсолютне центрування через translate -->\n\u003Cdiv class=\"absolute top-1\u002F2 left-1\u002F2 -translate-x-1\u002F2 -translate-y-1\u002F2\">\n    Точно в центрі батька\n\u003C\u002Fdiv>\n",[3392,6725,6726,6731,6744,6756,6761,6769,6774,6778,6783,6796,6803,6808,6816,6820,6825,6840,6845,6853,6857,6862,6877,6882],{"__ignoreMap":3438},[3599,6727,6728],{"class":3601,"line":3602},[3599,6729,6730],{"class":3605},"\u003C!-- Toast notification: виїжджає з правого краю -->\n",[3599,6732,6733,6735,6737,6739,6741],{"class":3601,"line":3609},[3599,6734,3756],{"class":3755},[3599,6736,3820],{"class":3759},[3599,6738,3763],{"class":3623},[3599,6740,3766],{"class":3616},[3599,6742,6743],{"class":3769},"\"translate-x-full transition-transform duration-300 ease-out\"\n",[3599,6745,6746,6749,6751,6754],{"class":3601,"line":3620},[3599,6747,6748],{"class":3623},"     id",[3599,6750,3766],{"class":3616},[3599,6752,6753],{"class":3769},"\"toast\"",[3599,6755,3773],{"class":3755},[3599,6757,6758],{"class":3601,"line":3637},[3599,6759,6760],{"class":3616},"    Повідомлення\n",[3599,6762,6763,6765,6767],{"class":3601,"line":3654},[3599,6764,4389],{"class":3755},[3599,6766,3820],{"class":3759},[3599,6768,3773],{"class":3755},[3599,6770,6771],{"class":3601,"line":3660},[3599,6772,6773],{"class":3605},"\u003C!-- При появі: js → classList.remove('translate-x-full') -->\n",[3599,6775,6776],{"class":3601,"line":3666},[3599,6777,3779],{"emptyLinePlaceholder":3778},[3599,6779,6780],{"class":3601,"line":3703},[3599,6781,6782],{"class":3605},"\u003C!-- Tooltip: з'являється знизу елемента -->\n",[3599,6784,6785,6787,6789,6791,6793],{"class":3601,"line":3717},[3599,6786,3756],{"class":3755},[3599,6788,3820],{"class":3759},[3599,6790,3763],{"class":3623},[3599,6792,3766],{"class":3616},[3599,6794,6795],{"class":3769},"\"opacity-0 translate-y-2 transition-all duration-200\n",[3599,6797,6798,6801],{"class":3601,"line":3832},[3599,6799,6800],{"class":3769},"            group-hover:opacity-100 group-hover:translate-y-0\"",[3599,6802,3773],{"class":3755},[3599,6804,6805],{"class":3601,"line":3838},[3599,6806,6807],{"class":3616},"    Підказка\n",[3599,6809,6810,6812,6814],{"class":3601,"line":3843},[3599,6811,4389],{"class":3755},[3599,6813,3820],{"class":3759},[3599,6815,3773],{"class":3755},[3599,6817,6818],{"class":3601,"line":3849},[3599,6819,3779],{"emptyLinePlaceholder":3778},[3599,6821,6822],{"class":3601,"line":3865},[3599,6823,6824],{"class":3605},"\u003C!-- Hover lift effect -->\n",[3599,6826,6827,6829,6831,6833,6835,6838],{"class":3601,"line":3870},[3599,6828,3756],{"class":3755},[3599,6830,3820],{"class":3759},[3599,6832,3763],{"class":3623},[3599,6834,3766],{"class":3616},[3599,6836,6837],{"class":3769},"\"hover:-translate-y-1 hover:shadow-lg transition-all duration-200\"",[3599,6839,3773],{"class":3755},[3599,6841,6842],{"class":3601,"line":3876},[3599,6843,6844],{"class":3616},"    Картка підіймається\n",[3599,6846,6847,6849,6851],{"class":3601,"line":3892},[3599,6848,4389],{"class":3755},[3599,6850,3820],{"class":3759},[3599,6852,3773],{"class":3755},[3599,6854,6855],{"class":3601,"line":3897},[3599,6856,3779],{"emptyLinePlaceholder":3778},[3599,6858,6859],{"class":3601,"line":3903},[3599,6860,6861],{"class":3605},"\u003C!-- Абсолютне центрування через translate -->\n",[3599,6863,6864,6866,6868,6870,6872,6875],{"class":3601,"line":3919},[3599,6865,3756],{"class":3755},[3599,6867,3820],{"class":3759},[3599,6869,3763],{"class":3623},[3599,6871,3766],{"class":3616},[3599,6873,6874],{"class":3769},"\"absolute top-1\u002F2 left-1\u002F2 -translate-x-1\u002F2 -translate-y-1\u002F2\"",[3599,6876,3773],{"class":3755},[3599,6878,6879],{"class":3601,"line":3924},[3599,6880,6881],{"class":3616},"    Точно в центрі батька\n",[3599,6883,6884,6886,6888],{"class":3601,"line":3930},[3599,6885,4389],{"class":3755},[3599,6887,3820],{"class":3759},[3599,6889,3773],{"class":3755},[3409,6891],{},[3416,6893,6895],{"id":6894},"_25-skew-нахил-skew","2.5. Skew: нахил (skew)",[3430,6897,6899],{"className":3741,"code":6898,"language":3743,"meta":3438,"style":3438},"\u003C!-- По горизонталі -->\n\u003Cdiv class=\"skew-x-0\">  \u003C!-- 0deg -->\n\u003Cdiv class=\"skew-x-1\">  \u003C!-- 1deg -->\n\u003Cdiv class=\"skew-x-2\">  \u003C!-- 2deg -->\n\u003Cdiv class=\"skew-x-3\">  \u003C!-- 3deg -->\n\u003Cdiv class=\"skew-x-6\">  \u003C!-- 6deg -->\n\u003Cdiv class=\"skew-x-12\"> \u003C!-- 12deg -->\n\u003Cdiv class=\"-skew-x-6\"> \u003C!-- -6deg — нахил у протилежний бік -->\n\n\u003C!-- По вертикалі -->\n\u003Cdiv class=\"skew-y-3\">\n\u003Cdiv class=\"-skew-y-6\">\n\n\u003C!-- Довільні значення -->\n\u003Cdiv class=\"skew-x-[15deg]\">\n",[3392,6900,6901,6906,6924,6942,6960,6978,6996,7014,7032,7036,7041,7056,7071,7075,7079],{"__ignoreMap":3438},[3599,6902,6903],{"class":3601,"line":3602},[3599,6904,6905],{"class":3605},"\u003C!-- По горизонталі -->\n",[3599,6907,6908,6910,6912,6914,6916,6919,6921],{"class":3601,"line":3609},[3599,6909,3756],{"class":3755},[3599,6911,3820],{"class":3759},[3599,6913,3763],{"class":3623},[3599,6915,3766],{"class":3616},[3599,6917,6918],{"class":3769},"\"skew-x-0\"",[3599,6920,4003],{"class":3755},[3599,6922,6923],{"class":3605},"  \u003C!-- 0deg -->\n",[3599,6925,6926,6928,6930,6932,6934,6937,6939],{"class":3601,"line":3620},[3599,6927,3756],{"class":3755},[3599,6929,3820],{"class":3759},[3599,6931,3763],{"class":3623},[3599,6933,3766],{"class":3616},[3599,6935,6936],{"class":3769},"\"skew-x-1\"",[3599,6938,4003],{"class":3755},[3599,6940,6941],{"class":3605},"  \u003C!-- 1deg -->\n",[3599,6943,6944,6946,6948,6950,6952,6955,6957],{"class":3601,"line":3637},[3599,6945,3756],{"class":3755},[3599,6947,3820],{"class":3759},[3599,6949,3763],{"class":3623},[3599,6951,3766],{"class":3616},[3599,6953,6954],{"class":3769},"\"skew-x-2\"",[3599,6956,4003],{"class":3755},[3599,6958,6959],{"class":3605},"  \u003C!-- 2deg -->\n",[3599,6961,6962,6964,6966,6968,6970,6973,6975],{"class":3601,"line":3654},[3599,6963,3756],{"class":3755},[3599,6965,3820],{"class":3759},[3599,6967,3763],{"class":3623},[3599,6969,3766],{"class":3616},[3599,6971,6972],{"class":3769},"\"skew-x-3\"",[3599,6974,4003],{"class":3755},[3599,6976,6977],{"class":3605},"  \u003C!-- 3deg -->\n",[3599,6979,6980,6982,6984,6986,6988,6991,6993],{"class":3601,"line":3660},[3599,6981,3756],{"class":3755},[3599,6983,3820],{"class":3759},[3599,6985,3763],{"class":3623},[3599,6987,3766],{"class":3616},[3599,6989,6990],{"class":3769},"\"skew-x-6\"",[3599,6992,4003],{"class":3755},[3599,6994,6995],{"class":3605},"  \u003C!-- 6deg -->\n",[3599,6997,6998,7000,7002,7004,7006,7009,7011],{"class":3601,"line":3666},[3599,6999,3756],{"class":3755},[3599,7001,3820],{"class":3759},[3599,7003,3763],{"class":3623},[3599,7005,3766],{"class":3616},[3599,7007,7008],{"class":3769},"\"skew-x-12\"",[3599,7010,4003],{"class":3755},[3599,7012,7013],{"class":3605}," \u003C!-- 12deg -->\n",[3599,7015,7016,7018,7020,7022,7024,7027,7029],{"class":3601,"line":3703},[3599,7017,3756],{"class":3755},[3599,7019,3820],{"class":3759},[3599,7021,3763],{"class":3623},[3599,7023,3766],{"class":3616},[3599,7025,7026],{"class":3769},"\"-skew-x-6\"",[3599,7028,4003],{"class":3755},[3599,7030,7031],{"class":3605}," \u003C!-- -6deg — нахил у протилежний бік -->\n",[3599,7033,7034],{"class":3601,"line":3717},[3599,7035,3779],{"emptyLinePlaceholder":3778},[3599,7037,7038],{"class":3601,"line":3832},[3599,7039,7040],{"class":3605},"\u003C!-- По вертикалі -->\n",[3599,7042,7043,7045,7047,7049,7051,7054],{"class":3601,"line":3838},[3599,7044,3756],{"class":3755},[3599,7046,3820],{"class":3759},[3599,7048,3763],{"class":3623},[3599,7050,3766],{"class":3616},[3599,7052,7053],{"class":3769},"\"skew-y-3\"",[3599,7055,3773],{"class":3755},[3599,7057,7058,7060,7062,7064,7066,7069],{"class":3601,"line":3843},[3599,7059,3756],{"class":3755},[3599,7061,3820],{"class":3759},[3599,7063,3763],{"class":3623},[3599,7065,3766],{"class":3616},[3599,7067,7068],{"class":3769},"\"-skew-y-6\"",[3599,7070,3773],{"class":3755},[3599,7072,7073],{"class":3601,"line":3849},[3599,7074,3779],{"emptyLinePlaceholder":3778},[3599,7076,7077],{"class":3601,"line":3865},[3599,7078,5944],{"class":3605},[3599,7080,7081,7083,7085,7087,7089,7092],{"class":3601,"line":3870},[3599,7082,3756],{"class":3755},[3599,7084,3820],{"class":3759},[3599,7086,3763],{"class":3623},[3599,7088,3766],{"class":3616},[3599,7090,7091],{"class":3769},"\"skew-x-[15deg]\"",[3599,7093,3773],{"class":3755},[3353,7095,7096],{},"Skew рідко використовується для анімацій — частіше для декоративних діагональних розділювачів секцій:",[3430,7098,7100],{"className":3741,"code":7099,"language":3743,"meta":3438,"style":3438},"\u003C!-- Діагональний розділювач між секціями -->\n\u003Cdiv class=\"relative h-24 bg-indigo-600 -skew-y-3 -mt-12 -mb-12\">\u003C\u002Fdiv>\n",[3392,7101,7102,7107],{"__ignoreMap":3438},[3599,7103,7104],{"class":3601,"line":3602},[3599,7105,7106],{"class":3605},"\u003C!-- Діагональний розділювач між секціями -->\n",[3599,7108,7109,7111,7113,7115,7117,7120,7123,7125],{"class":3601,"line":3609},[3599,7110,3756],{"class":3755},[3599,7112,3820],{"class":3759},[3599,7114,3763],{"class":3623},[3599,7116,3766],{"class":3616},[3599,7118,7119],{"class":3769},"\"relative h-24 bg-indigo-600 -skew-y-3 -mt-12 -mb-12\"",[3599,7121,7122],{"class":3755},">\u003C\u002F",[3599,7124,3820],{"class":3759},[3599,7126,3773],{"class":3755},[3409,7128],{},[3416,7130,7132],{"id":7131},"_26-transform-origin-точка-обертання","2.6. Transform Origin: точка обертання",[3353,7134,7135,7136,7139],{},"За замовчуванням всі трансформації відбуваються відносно центру елемента. Клас ",[3392,7137,7138],{},"origin-*"," змінює цю точку:",[3430,7141,7143],{"className":3741,"code":7142,"language":3743,"meta":3438,"style":3438},"\u003C!-- Стандартна шкала origin -->\n\u003Cdiv class=\"origin-center\">   \u003C!-- центр (default) -->\n\u003Cdiv class=\"origin-top\">      \u003C!-- верхній центр -->\n\u003Cdiv class=\"origin-top-right\">\u003C!-- верхній правий кут -->\n\u003Cdiv class=\"origin-right\">    \u003C!-- правий центр -->\n\u003Cdiv class=\"origin-bottom-right\">\n\u003Cdiv class=\"origin-bottom\">\n\u003Cdiv class=\"origin-bottom-left\">\n\u003Cdiv class=\"origin-left\">\n\u003Cdiv class=\"origin-top-left\">\n\n\u003C!-- Довільна точка -->\n\u003Cdiv class=\"origin-[33%_75%]\">\n",[3392,7144,7145,7150,7168,7186,7204,7222,7237,7252,7267,7282,7297,7301,7306],{"__ignoreMap":3438},[3599,7146,7147],{"class":3601,"line":3602},[3599,7148,7149],{"class":3605},"\u003C!-- Стандартна шкала origin -->\n",[3599,7151,7152,7154,7156,7158,7160,7163,7165],{"class":3601,"line":3609},[3599,7153,3756],{"class":3755},[3599,7155,3820],{"class":3759},[3599,7157,3763],{"class":3623},[3599,7159,3766],{"class":3616},[3599,7161,7162],{"class":3769},"\"origin-center\"",[3599,7164,4003],{"class":3755},[3599,7166,7167],{"class":3605},"   \u003C!-- центр (default) -->\n",[3599,7169,7170,7172,7174,7176,7178,7181,7183],{"class":3601,"line":3620},[3599,7171,3756],{"class":3755},[3599,7173,3820],{"class":3759},[3599,7175,3763],{"class":3623},[3599,7177,3766],{"class":3616},[3599,7179,7180],{"class":3769},"\"origin-top\"",[3599,7182,4003],{"class":3755},[3599,7184,7185],{"class":3605},"      \u003C!-- верхній центр -->\n",[3599,7187,7188,7190,7192,7194,7196,7199,7201],{"class":3601,"line":3637},[3599,7189,3756],{"class":3755},[3599,7191,3820],{"class":3759},[3599,7193,3763],{"class":3623},[3599,7195,3766],{"class":3616},[3599,7197,7198],{"class":3769},"\"origin-top-right\"",[3599,7200,4003],{"class":3755},[3599,7202,7203],{"class":3605},"\u003C!-- верхній правий кут -->\n",[3599,7205,7206,7208,7210,7212,7214,7217,7219],{"class":3601,"line":3654},[3599,7207,3756],{"class":3755},[3599,7209,3820],{"class":3759},[3599,7211,3763],{"class":3623},[3599,7213,3766],{"class":3616},[3599,7215,7216],{"class":3769},"\"origin-right\"",[3599,7218,4003],{"class":3755},[3599,7220,7221],{"class":3605},"    \u003C!-- правий центр -->\n",[3599,7223,7224,7226,7228,7230,7232,7235],{"class":3601,"line":3660},[3599,7225,3756],{"class":3755},[3599,7227,3820],{"class":3759},[3599,7229,3763],{"class":3623},[3599,7231,3766],{"class":3616},[3599,7233,7234],{"class":3769},"\"origin-bottom-right\"",[3599,7236,3773],{"class":3755},[3599,7238,7239,7241,7243,7245,7247,7250],{"class":3601,"line":3666},[3599,7240,3756],{"class":3755},[3599,7242,3820],{"class":3759},[3599,7244,3763],{"class":3623},[3599,7246,3766],{"class":3616},[3599,7248,7249],{"class":3769},"\"origin-bottom\"",[3599,7251,3773],{"class":3755},[3599,7253,7254,7256,7258,7260,7262,7265],{"class":3601,"line":3703},[3599,7255,3756],{"class":3755},[3599,7257,3820],{"class":3759},[3599,7259,3763],{"class":3623},[3599,7261,3766],{"class":3616},[3599,7263,7264],{"class":3769},"\"origin-bottom-left\"",[3599,7266,3773],{"class":3755},[3599,7268,7269,7271,7273,7275,7277,7280],{"class":3601,"line":3717},[3599,7270,3756],{"class":3755},[3599,7272,3820],{"class":3759},[3599,7274,3763],{"class":3623},[3599,7276,3766],{"class":3616},[3599,7278,7279],{"class":3769},"\"origin-left\"",[3599,7281,3773],{"class":3755},[3599,7283,7284,7286,7288,7290,7292,7295],{"class":3601,"line":3832},[3599,7285,3756],{"class":3755},[3599,7287,3820],{"class":3759},[3599,7289,3763],{"class":3623},[3599,7291,3766],{"class":3616},[3599,7293,7294],{"class":3769},"\"origin-top-left\"",[3599,7296,3773],{"class":3755},[3599,7298,7299],{"class":3601,"line":3838},[3599,7300,3779],{"emptyLinePlaceholder":3778},[3599,7302,7303],{"class":3601,"line":3843},[3599,7304,7305],{"class":3605},"\u003C!-- Довільна точка -->\n",[3599,7307,7308,7310,7312,7314,7316,7319],{"class":3601,"line":3849},[3599,7309,3756],{"class":3755},[3599,7311,3820],{"class":3759},[3599,7313,3763],{"class":3623},[3599,7315,3766],{"class":3616},[3599,7317,7318],{"class":3769},"\"origin-[33%_75%]\"",[3599,7320,3773],{"class":3755},[3353,7322,7323],{},"Практичне застосування:",[3430,7325,7327],{"className":3741,"code":7326,"language":3743,"meta":3438,"style":3438},"\u003C!-- Розкриття зверху вниз (як dropdown) -->\n\u003Cdiv class=\"scale-y-0 origin-top transition-transform duration-200 group-open:scale-y-100\">\n    Контент dropdown\n\u003C\u002Fdiv>\n\n\u003C!-- Поворот із нижнього лівого кута (як сторінка книги) -->\n\u003Cdiv class=\"rotate-0 hover:-rotate-12 origin-bottom-left transition-transform duration-300\">\n\n\u003C!-- Zoom із лівого краю (camera pan effect) -->\n\u003Cimg class=\"scale-100 hover:scale-110 origin-left transition-transform duration-700\">\n",[3392,7328,7329,7334,7349,7354,7362,7366,7371,7386,7390,7395],{"__ignoreMap":3438},[3599,7330,7331],{"class":3601,"line":3602},[3599,7332,7333],{"class":3605},"\u003C!-- Розкриття зверху вниз (як dropdown) -->\n",[3599,7335,7336,7338,7340,7342,7344,7347],{"class":3601,"line":3609},[3599,7337,3756],{"class":3755},[3599,7339,3820],{"class":3759},[3599,7341,3763],{"class":3623},[3599,7343,3766],{"class":3616},[3599,7345,7346],{"class":3769},"\"scale-y-0 origin-top transition-transform duration-200 group-open:scale-y-100\"",[3599,7348,3773],{"class":3755},[3599,7350,7351],{"class":3601,"line":3620},[3599,7352,7353],{"class":3616},"    Контент dropdown\n",[3599,7355,7356,7358,7360],{"class":3601,"line":3637},[3599,7357,4389],{"class":3755},[3599,7359,3820],{"class":3759},[3599,7361,3773],{"class":3755},[3599,7363,7364],{"class":3601,"line":3654},[3599,7365,3779],{"emptyLinePlaceholder":3778},[3599,7367,7368],{"class":3601,"line":3660},[3599,7369,7370],{"class":3605},"\u003C!-- Поворот із нижнього лівого кута (як сторінка книги) -->\n",[3599,7372,7373,7375,7377,7379,7381,7384],{"class":3601,"line":3666},[3599,7374,3756],{"class":3755},[3599,7376,3820],{"class":3759},[3599,7378,3763],{"class":3623},[3599,7380,3766],{"class":3616},[3599,7382,7383],{"class":3769},"\"rotate-0 hover:-rotate-12 origin-bottom-left transition-transform duration-300\"",[3599,7385,3773],{"class":3755},[3599,7387,7388],{"class":3601,"line":3703},[3599,7389,3779],{"emptyLinePlaceholder":3778},[3599,7391,7392],{"class":3601,"line":3717},[3599,7393,7394],{"class":3605},"\u003C!-- Zoom із лівого краю (camera pan effect) -->\n",[3599,7396,7397,7399,7401,7403,7405,7408],{"class":3601,"line":3832},[3599,7398,3756],{"class":3755},[3599,7400,6030],{"class":3759},[3599,7402,3763],{"class":3623},[3599,7404,3766],{"class":3616},[3599,7406,7407],{"class":3769},"\"scale-100 hover:scale-110 origin-left transition-transform duration-700\"",[3599,7409,3773],{"class":3755},[4319,7411,7412],{":tailwind":4321},[3430,7413,7415],{"className":3741,"code":7414,"language":3743,"meta":3438,"style":3438},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"uk\">\n\u003Chead>\n\u003Cmeta charset=\"UTF-8\">\n\u003Cscript src=\"https:\u002F\u002Fcdn.tailwindcss.com\">\u003C\u002Fscript>\n\u003Clink href=\"https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n\u003C\u002Fhead>\n\u003Cbody class=\"p-6 bg-slate-50\" style=\"font-family: 'Inter', system-ui, sans-serif;\">\n    \u003Cdiv class=\"max-w-2xl mx-auto bg-white rounded-2xl border border-slate-200 p-6 shadow-sm space-y-6\">\n        \u003Cp class=\"text-xs font-bold text-slate-400 uppercase tracking-widest text-center\">Interactive 2D Transform Playground\u003C\u002Fp>\n        \n        \u003Cdiv class=\"grid grid-cols-1 md:grid-cols-2 gap-6 items-center\">\n            \u003C!-- Controls Panel -->\n            \u003Cdiv class=\"space-y-4 bg-slate-50 p-4 rounded-xl border border-slate-100\">\n                \u003C!-- Scale -->\n                \u003Cdiv class=\"space-y-1\">\n                    \u003Cdiv class=\"flex justify-between text-xs font-semibold text-slate-600\">\n                        \u003Cspan>Scale (Масштаб)\u003C\u002Fspan>\n                        \u003Cspan id=\"scaleVal\" class=\"font-mono\">1.0\u003C\u002Fspan>\n                    \u003C\u002Fdiv>\n                    \u003Cinput type=\"range\" min=\"0.5\" max=\"1.5\" step=\"0.1\" value=\"1.0\" id=\"scaleRange\" oninput=\"applyTransforms()\" class=\"w-full\">\n                \u003C\u002Fdiv>\n\n                \u003C!-- Rotate -->\n                \u003Cdiv class=\"space-y-1\">\n                    \u003Cdiv class=\"flex justify-between text-xs font-semibold text-slate-600\">\n                        \u003Cspan>Rotate (Поворот)\u003C\u002Fspan>\n                        \u003Cspan id=\"rotateVal\" class=\"font-mono\">0°\u003C\u002Fspan>\n                    \u003C\u002Fdiv>\n                    \u003Cinput type=\"range\" min=\"-180\" max=\"180\" step=\"5\" value=\"0\" id=\"rotateRange\" oninput=\"applyTransforms()\" class=\"w-full\">\n                \u003C\u002Fdiv>\n\n                \u003C!-- Translate X -->\n                \u003Cdiv class=\"space-y-1\">\n                    \u003Cdiv class=\"flex justify-between text-xs font-semibold text-slate-600\">\n                        \u003Cspan>Translate X (Зміщення X)\u003C\u002Fspan>\n                        \u003Cspan id=\"transXVal\" class=\"font-mono\">0px\u003C\u002Fspan>\n                    \u003C\u002Fdiv>\n                    \u003Cinput type=\"range\" min=\"-50\" max=\"50\" step=\"5\" value=\"0\" id=\"transXRange\" oninput=\"applyTransforms()\" class=\"w-full\">\n                \u003C\u002Fdiv>\n\n                \u003C!-- Translate Y -->\n                \u003Cdiv class=\"space-y-1\">\n                    \u003Cdiv class=\"flex justify-between text-xs font-semibold text-slate-600\">\n                        \u003Cspan>Translate Y (Зміщення Y)\u003C\u002Fspan>\n                        \u003Cspan id=\"transYVal\" class=\"font-mono\">0px\u003C\u002Fspan>\n                    \u003C\u002Fdiv>\n                    \u003Cinput type=\"range\" min=\"-50\" max=\"50\" step=\"5\" value=\"0\" id=\"transYRange\" oninput=\"applyTransforms()\" class=\"w-full\">\n                \u003C\u002Fdiv>\n\n                \u003C!-- Skew X -->\n                \u003Cdiv class=\"space-y-1\">\n                    \u003Cdiv class=\"flex justify-between text-xs font-semibold text-slate-600\">\n                        \u003Cspan>Skew X (Нахил X)\u003C\u002Fspan>\n                        \u003Cspan id=\"skewXVal\" class=\"font-mono\">0°\u003C\u002Fspan>\n                    \u003C\u002Fdiv>\n                    \u003Cinput type=\"range\" min=\"-30\" max=\"30\" step=\"2\" value=\"0\" id=\"skewXRange\" oninput=\"applyTransforms()\" class=\"w-full\">\n                \u003C\u002Fdiv>\n\n                \u003C!-- Origin -->\n                \u003Cdiv class=\"space-y-1\">\n                    \u003Clabel class=\"block text-xs font-semibold text-slate-600\">Origin (Точка обертання)\u003C\u002Flabel>\n                    \u003Cselect id=\"originSelect\" onchange=\"applyTransforms()\" class=\"w-full text-xs bg-white border border-slate-200 rounded-lg p-2 focus:outline-none\">\n                        \u003Coption value=\"origin-center\">origin-center (Центр)\u003C\u002Foption>\n                        \u003Coption value=\"origin-top-left\">origin-top-left (Верхній лівий)\u003C\u002Foption>\n                        \u003Coption value=\"origin-top-right\">origin-top-right (Верхній правий)\u003C\u002Foption>\n                        \u003Coption value=\"origin-bottom-left\">origin-bottom-left (Нижній лівий)\u003C\u002Foption>\n                        \u003Coption value=\"origin-bottom-right\">origin-bottom-right (Нижній правий)\u003C\u002Foption>\n                    \u003C\u002Fselect>\n                \u003C\u002Fdiv>\n            \u003C\u002Fdiv>\n\n            \u003C!-- Visual Target Display -->\n            \u003Cdiv class=\"h-64 flex flex-col items-center justify-center border border-slate-100 rounded-xl bg-slate-50\u002F50 p-4 relative overflow-hidden\">\n                \u003C!-- Helper Dot showing origin point -->\n                \u003Cdiv id=\"originDot\" class=\"absolute w-2 h-2 bg-red-500 rounded-full z-10\" style=\"left:50%; top:50%; margin-left:-4px; margin-top:-4px;\">\u003C\u002Fdiv>\n                \n                \u003C!-- Target Card -->\n                \u003Cdiv id=\"transformTarget\" class=\"w-28 h-28 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl flex flex-col items-center justify-center text-white shadow-lg transition-transform duration-100 ease-out origin-center\">\n                    \u003Cspan class=\"text-3xl\">🚀\u003C\u002Fspan>\n                    \u003Cspan class=\"text-[10px] font-bold mt-1 uppercase tracking-wider\">Transform\u003C\u002Fspan>\n                \u003C\u002Fdiv>\n            \u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n\n        \u003C!-- Class display -->\n        \u003Cdiv>\n            \u003Clabel class=\"block text-xs font-semibold text-slate-500 uppercase mb-2\">Generated Tailwind Classes\u003C\u002Flabel>\n            \u003Cdiv class=\"bg-slate-900 text-slate-300 rounded-lg p-3 text-xs font-mono break-all leading-normal shadow-inner\" id=\"classDisplay\">\n                scale-[1] rotate-[0deg] translate-x-[0px] translate-y-[0px] skew-x-[0deg] origin-center\n            \u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cscript>\n        function applyTransforms() {\n            const scale = document.getElementById('scaleRange').value;\n            const rotate = document.getElementById('rotateRange').value;\n            const transX = document.getElementById('transXRange').value;\n            const transY = document.getElementById('transYRange').value;\n            const skewX = document.getElementById('skewXRange').value;\n            const origin = document.getElementById('originSelect').value;\n\n            \u002F\u002F Update Labels\n            document.getElementById('scaleVal').textContent = parseFloat(scale).toFixed(1);\n            document.getElementById('rotateVal').textContent = rotate + '°';\n            document.getElementById('transXVal').textContent = transX + 'px';\n            document.getElementById('transYVal').textContent = transY + 'px';\n            document.getElementById('skewXVal').textContent = skewX + '°';\n\n            \u002F\u002F Apply style to target\n            const target = document.getElementById('transformTarget');\n            target.className = `w-28 h-28 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl flex flex-col items-center justify-center text-white shadow-lg transition-transform duration-100 ease-out ${origin}`;\n            target.style.transform = `scale(${scale}) rotate(${rotate}deg) translate(${transX}px, ${transY}px) skewX(${skewX}deg)`;\n\n            \u002F\u002F Update Origin Dot Position\n            const dot = document.getElementById('originDot');\n            if (origin === 'origin-center') { dot.style.left = '50%'; dot.style.top = '50%'; }\n            else if (origin === 'origin-top-left') { dot.style.left = 'calc(50% - 56px)'; dot.style.top = 'calc(50% - 56px)'; }\n            else if (origin === 'origin-top-right') { dot.style.left = 'calc(50% + 56px)'; dot.style.top = 'calc(50% - 56px)'; }\n            else if (origin === 'origin-bottom-left') { dot.style.left = 'calc(50% - 56px)'; dot.style.top = 'calc(50% + 56px)'; }\n            else if (origin === 'origin-bottom-right') { dot.style.left = 'calc(50% + 56px)'; dot.style.top = 'calc(50% + 56px)'; }\n\n            \u002F\u002F Display classes\n            const generatedClasses = `scale-[${scale}] rotate-[${rotate}deg] translate-x-[${transX}px] translate-y-[${transY}px] skew-x-[${skewX}deg] ${origin}`;\n            document.getElementById('classDisplay').textContent = generatedClasses;\n        }\n\n        \u002F\u002F Initialize\n        applyTransforms();\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[3392,7416,7417,7430,7446,7455,7472,7494,7519,7527,7550,7565,7589,7594,7609,7614,7629,7634,7649,7665,7683,7715,7724,7799,7807,7811,7816,7830,7844,7861,7891,7899,7964,7972,7976,7981,7995,8009,8026,8056,8064,8127,8135,8139,8144,8158,8172,8189,8218,8226,8287,8295,8299,8304,8318,8332,8349,8378,8386,8450,8458,8462,8467,8481,8506,8540,8564,8587,8610,8633,8656,8664,8672,8680,8684,8689,8704,8709,8742,8747,8752,8774,8798,8822,8830,8838,8846,8850,8855,8863,8887,8909,8914,8922,8930,8938,8942,8950,8962,8997,9023,9049,9075,9101,9127,9131,9137,9178,9208,9237,9265,9293,9298,9304,9327,9357,9427,9432,9438,9461,9519,9572,9623,9673,9723,9728,9734,9802,9826,9832,9837,9843,9852,9861,9870],{"__ignoreMap":3438},[3599,7418,7419,7422,7425,7428],{"class":3601,"line":3602},[3599,7420,7421],{"class":3755},"\u003C!",[3599,7423,7424],{"class":3759},"DOCTYPE",[3599,7426,7427],{"class":3623}," html",[3599,7429,3773],{"class":3755},[3599,7431,7432,7434,7436,7439,7441,7444],{"class":3601,"line":3609},[3599,7433,3756],{"class":3755},[3599,7435,3743],{"class":3759},[3599,7437,7438],{"class":3623}," lang",[3599,7440,3766],{"class":3616},[3599,7442,7443],{"class":3769},"\"uk\"",[3599,7445,3773],{"class":3755},[3599,7447,7448,7450,7453],{"class":3601,"line":3620},[3599,7449,3756],{"class":3755},[3599,7451,7452],{"class":3759},"head",[3599,7454,3773],{"class":3755},[3599,7456,7457,7459,7462,7465,7467,7470],{"class":3601,"line":3637},[3599,7458,3756],{"class":3755},[3599,7460,7461],{"class":3759},"meta",[3599,7463,7464],{"class":3623}," charset",[3599,7466,3766],{"class":3616},[3599,7468,7469],{"class":3769},"\"UTF-8\"",[3599,7471,3773],{"class":3755},[3599,7473,7474,7476,7479,7482,7485,7488,7490,7492],{"class":3601,"line":3654},[3599,7475,3756],{"class":3755},[3599,7477,7478],{"class":3759},"script",[3599,7480,7481],{"class":3623}," src",[3599,7483,3766],{"class":7484},"sD7JJ",[3599,7486,7487],{"class":3769},"\"https:\u002F\u002Fcdn.tailwindcss.com\"",[3599,7489,7122],{"class":3755},[3599,7491,7478],{"class":3759},[3599,7493,3773],{"class":3755},[3599,7495,7496,7498,7501,7504,7506,7509,7512,7514,7517],{"class":3601,"line":3660},[3599,7497,3756],{"class":3755},[3599,7499,7500],{"class":3759},"link",[3599,7502,7503],{"class":3623}," href",[3599,7505,3766],{"class":3616},[3599,7507,7508],{"class":3769},"\"https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&display=swap\"",[3599,7510,7511],{"class":3623}," rel",[3599,7513,3766],{"class":3616},[3599,7515,7516],{"class":3769},"\"stylesheet\"",[3599,7518,3773],{"class":3755},[3599,7520,7521,7523,7525],{"class":3601,"line":3666},[3599,7522,4389],{"class":3755},[3599,7524,7452],{"class":3759},[3599,7526,3773],{"class":3755},[3599,7528,7529,7531,7534,7536,7538,7541,7543,7545,7548],{"class":3601,"line":3703},[3599,7530,3756],{"class":3755},[3599,7532,7533],{"class":3759},"body",[3599,7535,3763],{"class":3623},[3599,7537,3766],{"class":3616},[3599,7539,7540],{"class":3769},"\"p-6 bg-slate-50\"",[3599,7542,4342],{"class":3623},[3599,7544,3766],{"class":3616},[3599,7546,7547],{"class":3769},"\"font-family: 'Inter', system-ui, sans-serif;\"",[3599,7549,3773],{"class":3755},[3599,7551,7552,7554,7556,7558,7560,7563],{"class":3601,"line":3717},[3599,7553,4363],{"class":3755},[3599,7555,3820],{"class":3759},[3599,7557,3763],{"class":3623},[3599,7559,3766],{"class":3616},[3599,7561,7562],{"class":3769},"\"max-w-2xl mx-auto bg-white rounded-2xl border border-slate-200 p-6 shadow-sm space-y-6\"",[3599,7564,3773],{"class":3755},[3599,7566,7567,7569,7571,7573,7575,7578,7580,7583,7585,7587],{"class":3601,"line":3832},[3599,7568,4372],{"class":3755},[3599,7570,3353],{"class":3759},[3599,7572,3763],{"class":3623},[3599,7574,3766],{"class":3616},[3599,7576,7577],{"class":3769},"\"text-xs font-bold text-slate-400 uppercase tracking-widest text-center\"",[3599,7579,4003],{"class":3755},[3599,7581,7582],{"class":3616},"Interactive 2D Transform Playground",[3599,7584,4389],{"class":3755},[3599,7586,3353],{"class":3759},[3599,7588,3773],{"class":3755},[3599,7590,7591],{"class":3601,"line":3838},[3599,7592,7593],{"class":3616},"        \n",[3599,7595,7596,7598,7600,7602,7604,7607],{"class":3601,"line":3843},[3599,7597,4372],{"class":3755},[3599,7599,3820],{"class":3759},[3599,7601,3763],{"class":3623},[3599,7603,3766],{"class":3616},[3599,7605,7606],{"class":3769},"\"grid grid-cols-1 md:grid-cols-2 gap-6 items-center\"",[3599,7608,3773],{"class":3755},[3599,7610,7611],{"class":3601,"line":3849},[3599,7612,7613],{"class":3605},"            \u003C!-- Controls Panel -->\n",[3599,7615,7616,7618,7620,7622,7624,7627],{"class":3601,"line":3865},[3599,7617,4422],{"class":3755},[3599,7619,3820],{"class":3759},[3599,7621,3763],{"class":3623},[3599,7623,3766],{"class":3616},[3599,7625,7626],{"class":3769},"\"space-y-4 bg-slate-50 p-4 rounded-xl border border-slate-100\"",[3599,7628,3773],{"class":3755},[3599,7630,7631],{"class":3601,"line":3870},[3599,7632,7633],{"class":3605},"                \u003C!-- Scale -->\n",[3599,7635,7636,7638,7640,7642,7644,7647],{"class":3601,"line":3876},[3599,7637,4761],{"class":3755},[3599,7639,3820],{"class":3759},[3599,7641,3763],{"class":3623},[3599,7643,3766],{"class":3616},[3599,7645,7646],{"class":3769},"\"space-y-1\"",[3599,7648,3773],{"class":3755},[3599,7650,7651,7654,7656,7658,7660,7663],{"class":3601,"line":3892},[3599,7652,7653],{"class":3755},"                    \u003C",[3599,7655,3820],{"class":3759},[3599,7657,3763],{"class":3623},[3599,7659,3766],{"class":3616},[3599,7661,7662],{"class":3769},"\"flex justify-between text-xs font-semibold text-slate-600\"",[3599,7664,3773],{"class":3755},[3599,7666,7667,7670,7672,7674,7677,7679,7681],{"class":3601,"line":3897},[3599,7668,7669],{"class":3755},"                        \u003C",[3599,7671,3599],{"class":3759},[3599,7673,4003],{"class":3755},[3599,7675,7676],{"class":3616},"Scale (Масштаб)",[3599,7678,4389],{"class":3755},[3599,7680,3599],{"class":3759},[3599,7682,3773],{"class":3755},[3599,7684,7685,7687,7689,7692,7694,7697,7699,7701,7704,7706,7709,7711,7713],{"class":3601,"line":3903},[3599,7686,7669],{"class":3755},[3599,7688,3599],{"class":3759},[3599,7690,7691],{"class":3623}," id",[3599,7693,3766],{"class":3616},[3599,7695,7696],{"class":3769},"\"scaleVal\"",[3599,7698,3763],{"class":3623},[3599,7700,3766],{"class":3616},[3599,7702,7703],{"class":3769},"\"font-mono\"",[3599,7705,4003],{"class":3755},[3599,7707,7708],{"class":3616},"1.0",[3599,7710,4389],{"class":3755},[3599,7712,3599],{"class":3759},[3599,7714,3773],{"class":3755},[3599,7716,7717,7720,7722],{"class":3601,"line":3919},[3599,7718,7719],{"class":3755},"                    \u003C\u002F",[3599,7721,3820],{"class":3759},[3599,7723,3773],{"class":3755},[3599,7725,7726,7728,7730,7732,7734,7737,7740,7742,7745,7748,7750,7753,7756,7758,7761,7764,7766,7769,7771,7773,7776,7779,7781,7784,7787,7790,7792,7794,7797],{"class":3601,"line":3924},[3599,7727,7653],{"class":3755},[3599,7729,5196],{"class":3759},[3599,7731,5199],{"class":3623},[3599,7733,3766],{"class":3616},[3599,7735,7736],{"class":3769},"\"range\"",[3599,7738,7739],{"class":3623}," min",[3599,7741,3766],{"class":3616},[3599,7743,7744],{"class":3769},"\"0.5\"",[3599,7746,7747],{"class":3623}," max",[3599,7749,3766],{"class":3616},[3599,7751,7752],{"class":3769},"\"1.5\"",[3599,7754,7755],{"class":3623}," step",[3599,7757,3766],{"class":3616},[3599,7759,7760],{"class":3769},"\"0.1\"",[3599,7762,7763],{"class":3623}," value",[3599,7765,3766],{"class":3616},[3599,7767,7768],{"class":3769},"\"1.0\"",[3599,7770,7691],{"class":3623},[3599,7772,3766],{"class":3616},[3599,7774,7775],{"class":3769},"\"scaleRange\"",[3599,7777,7778],{"class":3623}," oninput",[3599,7780,3766],{"class":3616},[3599,7782,7783],{"class":3769},"\"",[3599,7785,7786],{"class":3674},"applyTransforms",[3599,7788,7789],{"class":3769},"()\"",[3599,7791,3763],{"class":3623},[3599,7793,3766],{"class":3616},[3599,7795,7796],{"class":3769},"\"w-full\"",[3599,7798,3773],{"class":3755},[3599,7800,7801,7803,7805],{"class":3601,"line":3930},[3599,7802,4790],{"class":3755},[3599,7804,3820],{"class":3759},[3599,7806,3773],{"class":3755},[3599,7808,7809],{"class":3601,"line":4516},[3599,7810,3779],{"emptyLinePlaceholder":3778},[3599,7812,7813],{"class":3601,"line":4521},[3599,7814,7815],{"class":3605},"                \u003C!-- Rotate -->\n",[3599,7817,7818,7820,7822,7824,7826,7828],{"class":3601,"line":4527},[3599,7819,4761],{"class":3755},[3599,7821,3820],{"class":3759},[3599,7823,3763],{"class":3623},[3599,7825,3766],{"class":3616},[3599,7827,7646],{"class":3769},[3599,7829,3773],{"class":3755},[3599,7831,7832,7834,7836,7838,7840,7842],{"class":3601,"line":4541},[3599,7833,7653],{"class":3755},[3599,7835,3820],{"class":3759},[3599,7837,3763],{"class":3623},[3599,7839,3766],{"class":3616},[3599,7841,7662],{"class":3769},[3599,7843,3773],{"class":3755},[3599,7845,7846,7848,7850,7852,7855,7857,7859],{"class":3601,"line":4547},[3599,7847,7669],{"class":3755},[3599,7849,3599],{"class":3759},[3599,7851,4003],{"class":3755},[3599,7853,7854],{"class":3616},"Rotate (Поворот)",[3599,7856,4389],{"class":3755},[3599,7858,3599],{"class":3759},[3599,7860,3773],{"class":3755},[3599,7862,7863,7865,7867,7869,7871,7874,7876,7878,7880,7882,7885,7887,7889],{"class":3601,"line":4553},[3599,7864,7669],{"class":3755},[3599,7866,3599],{"class":3759},[3599,7868,7691],{"class":3623},[3599,7870,3766],{"class":3616},[3599,7872,7873],{"class":3769},"\"rotateVal\"",[3599,7875,3763],{"class":3623},[3599,7877,3766],{"class":3616},[3599,7879,7703],{"class":3769},[3599,7881,4003],{"class":3755},[3599,7883,7884],{"class":3616},"0°",[3599,7886,4389],{"class":3755},[3599,7888,3599],{"class":3759},[3599,7890,3773],{"class":3755},[3599,7892,7893,7895,7897],{"class":3601,"line":4561},[3599,7894,7719],{"class":3755},[3599,7896,3820],{"class":3759},[3599,7898,3773],{"class":3755},[3599,7900,7901,7903,7905,7907,7909,7911,7913,7915,7918,7920,7922,7925,7927,7929,7932,7934,7936,7939,7941,7943,7946,7948,7950,7952,7954,7956,7958,7960,7962],{"class":3601,"line":4567},[3599,7902,7653],{"class":3755},[3599,7904,5196],{"class":3759},[3599,7906,5199],{"class":3623},[3599,7908,3766],{"class":3616},[3599,7910,7736],{"class":3769},[3599,7912,7739],{"class":3623},[3599,7914,3766],{"class":3616},[3599,7916,7917],{"class":3769},"\"-180\"",[3599,7919,7747],{"class":3623},[3599,7921,3766],{"class":3616},[3599,7923,7924],{"class":3769},"\"180\"",[3599,7926,7755],{"class":3623},[3599,7928,3766],{"class":3616},[3599,7930,7931],{"class":3769},"\"5\"",[3599,7933,7763],{"class":3623},[3599,7935,3766],{"class":3616},[3599,7937,7938],{"class":3769},"\"0\"",[3599,7940,7691],{"class":3623},[3599,7942,3766],{"class":3616},[3599,7944,7945],{"class":3769},"\"rotateRange\"",[3599,7947,7778],{"class":3623},[3599,7949,3766],{"class":3616},[3599,7951,7783],{"class":3769},[3599,7953,7786],{"class":3674},[3599,7955,7789],{"class":3769},[3599,7957,3763],{"class":3623},[3599,7959,3766],{"class":3616},[3599,7961,7796],{"class":3769},[3599,7963,3773],{"class":3755},[3599,7965,7966,7968,7970],{"class":3601,"line":4576},[3599,7967,4790],{"class":3755},[3599,7969,3820],{"class":3759},[3599,7971,3773],{"class":3755},[3599,7973,7974],{"class":3601,"line":4581},[3599,7975,3779],{"emptyLinePlaceholder":3778},[3599,7977,7978],{"class":3601,"line":4587},[3599,7979,7980],{"class":3605},"                \u003C!-- Translate X -->\n",[3599,7982,7983,7985,7987,7989,7991,7993],{"class":3601,"line":4601},[3599,7984,4761],{"class":3755},[3599,7986,3820],{"class":3759},[3599,7988,3763],{"class":3623},[3599,7990,3766],{"class":3616},[3599,7992,7646],{"class":3769},[3599,7994,3773],{"class":3755},[3599,7996,7997,7999,8001,8003,8005,8007],{"class":3601,"line":4606},[3599,7998,7653],{"class":3755},[3599,8000,3820],{"class":3759},[3599,8002,3763],{"class":3623},[3599,8004,3766],{"class":3616},[3599,8006,7662],{"class":3769},[3599,8008,3773],{"class":3755},[3599,8010,8011,8013,8015,8017,8020,8022,8024],{"class":3601,"line":4612},[3599,8012,7669],{"class":3755},[3599,8014,3599],{"class":3759},[3599,8016,4003],{"class":3755},[3599,8018,8019],{"class":3616},"Translate X (Зміщення X)",[3599,8021,4389],{"class":3755},[3599,8023,3599],{"class":3759},[3599,8025,3773],{"class":3755},[3599,8027,8028,8030,8032,8034,8036,8039,8041,8043,8045,8047,8050,8052,8054],{"class":3601,"line":4619},[3599,8029,7669],{"class":3755},[3599,8031,3599],{"class":3759},[3599,8033,7691],{"class":3623},[3599,8035,3766],{"class":3616},[3599,8037,8038],{"class":3769},"\"transXVal\"",[3599,8040,3763],{"class":3623},[3599,8042,3766],{"class":3616},[3599,8044,7703],{"class":3769},[3599,8046,4003],{"class":3755},[3599,8048,8049],{"class":3616},"0px",[3599,8051,4389],{"class":3755},[3599,8053,3599],{"class":3759},[3599,8055,3773],{"class":3755},[3599,8057,8058,8060,8062],{"class":3601,"line":4625},[3599,8059,7719],{"class":3755},[3599,8061,3820],{"class":3759},[3599,8063,3773],{"class":3755},[3599,8065,8066,8068,8070,8072,8074,8076,8078,8080,8083,8085,8087,8090,8092,8094,8096,8098,8100,8102,8104,8106,8109,8111,8113,8115,8117,8119,8121,8123,8125],{"class":3601,"line":4634},[3599,8067,7653],{"class":3755},[3599,8069,5196],{"class":3759},[3599,8071,5199],{"class":3623},[3599,8073,3766],{"class":3616},[3599,8075,7736],{"class":3769},[3599,8077,7739],{"class":3623},[3599,8079,3766],{"class":3616},[3599,8081,8082],{"class":3769},"\"-50\"",[3599,8084,7747],{"class":3623},[3599,8086,3766],{"class":3616},[3599,8088,8089],{"class":3769},"\"50\"",[3599,8091,7755],{"class":3623},[3599,8093,3766],{"class":3616},[3599,8095,7931],{"class":3769},[3599,8097,7763],{"class":3623},[3599,8099,3766],{"class":3616},[3599,8101,7938],{"class":3769},[3599,8103,7691],{"class":3623},[3599,8105,3766],{"class":3616},[3599,8107,8108],{"class":3769},"\"transXRange\"",[3599,8110,7778],{"class":3623},[3599,8112,3766],{"class":3616},[3599,8114,7783],{"class":3769},[3599,8116,7786],{"class":3674},[3599,8118,7789],{"class":3769},[3599,8120,3763],{"class":3623},[3599,8122,3766],{"class":3616},[3599,8124,7796],{"class":3769},[3599,8126,3773],{"class":3755},[3599,8128,8129,8131,8133],{"class":3601,"line":4639},[3599,8130,4790],{"class":3755},[3599,8132,3820],{"class":3759},[3599,8134,3773],{"class":3755},[3599,8136,8137],{"class":3601,"line":4649},[3599,8138,3779],{"emptyLinePlaceholder":3778},[3599,8140,8141],{"class":3601,"line":4659},[3599,8142,8143],{"class":3605},"                \u003C!-- Translate Y -->\n",[3599,8145,8146,8148,8150,8152,8154,8156],{"class":3601,"line":4664},[3599,8147,4761],{"class":3755},[3599,8149,3820],{"class":3759},[3599,8151,3763],{"class":3623},[3599,8153,3766],{"class":3616},[3599,8155,7646],{"class":3769},[3599,8157,3773],{"class":3755},[3599,8159,8160,8162,8164,8166,8168,8170],{"class":3601,"line":4670},[3599,8161,7653],{"class":3755},[3599,8163,3820],{"class":3759},[3599,8165,3763],{"class":3623},[3599,8167,3766],{"class":3616},[3599,8169,7662],{"class":3769},[3599,8171,3773],{"class":3755},[3599,8173,8174,8176,8178,8180,8183,8185,8187],{"class":3601,"line":4679},[3599,8175,7669],{"class":3755},[3599,8177,3599],{"class":3759},[3599,8179,4003],{"class":3755},[3599,8181,8182],{"class":3616},"Translate Y (Зміщення Y)",[3599,8184,4389],{"class":3755},[3599,8186,3599],{"class":3759},[3599,8188,3773],{"class":3755},[3599,8190,8191,8193,8195,8197,8199,8202,8204,8206,8208,8210,8212,8214,8216],{"class":3601,"line":4703},[3599,8192,7669],{"class":3755},[3599,8194,3599],{"class":3759},[3599,8196,7691],{"class":3623},[3599,8198,3766],{"class":3616},[3599,8200,8201],{"class":3769},"\"transYVal\"",[3599,8203,3763],{"class":3623},[3599,8205,3766],{"class":3616},[3599,8207,7703],{"class":3769},[3599,8209,4003],{"class":3755},[3599,8211,8049],{"class":3616},[3599,8213,4389],{"class":3755},[3599,8215,3599],{"class":3759},[3599,8217,3773],{"class":3755},[3599,8219,8220,8222,8224],{"class":3601,"line":4719},[3599,8221,7719],{"class":3755},[3599,8223,3820],{"class":3759},[3599,8225,3773],{"class":3755},[3599,8227,8228,8230,8232,8234,8236,8238,8240,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260,8262,8264,8266,8269,8271,8273,8275,8277,8279,8281,8283,8285],{"class":3601,"line":4724},[3599,8229,7653],{"class":3755},[3599,8231,5196],{"class":3759},[3599,8233,5199],{"class":3623},[3599,8235,3766],{"class":3616},[3599,8237,7736],{"class":3769},[3599,8239,7739],{"class":3623},[3599,8241,3766],{"class":3616},[3599,8243,8082],{"class":3769},[3599,8245,7747],{"class":3623},[3599,8247,3766],{"class":3616},[3599,8249,8089],{"class":3769},[3599,8251,7755],{"class":3623},[3599,8253,3766],{"class":3616},[3599,8255,7931],{"class":3769},[3599,8257,7763],{"class":3623},[3599,8259,3766],{"class":3616},[3599,8261,7938],{"class":3769},[3599,8263,7691],{"class":3623},[3599,8265,3766],{"class":3616},[3599,8267,8268],{"class":3769},"\"transYRange\"",[3599,8270,7778],{"class":3623},[3599,8272,3766],{"class":3616},[3599,8274,7783],{"class":3769},[3599,8276,7786],{"class":3674},[3599,8278,7789],{"class":3769},[3599,8280,3763],{"class":3623},[3599,8282,3766],{"class":3616},[3599,8284,7796],{"class":3769},[3599,8286,3773],{"class":3755},[3599,8288,8289,8291,8293],{"class":3601,"line":4738},[3599,8290,4790],{"class":3755},[3599,8292,3820],{"class":3759},[3599,8294,3773],{"class":3755},[3599,8296,8297],{"class":3601,"line":4744},[3599,8298,3779],{"emptyLinePlaceholder":3778},[3599,8300,8301],{"class":3601,"line":4750},[3599,8302,8303],{"class":3605},"                \u003C!-- Skew X -->\n",[3599,8305,8306,8308,8310,8312,8314,8316],{"class":3601,"line":4758},[3599,8307,4761],{"class":3755},[3599,8309,3820],{"class":3759},[3599,8311,3763],{"class":3623},[3599,8313,3766],{"class":3616},[3599,8315,7646],{"class":3769},[3599,8317,3773],{"class":3755},[3599,8319,8320,8322,8324,8326,8328,8330],{"class":3601,"line":4773},[3599,8321,7653],{"class":3755},[3599,8323,3820],{"class":3759},[3599,8325,3763],{"class":3623},[3599,8327,3766],{"class":3616},[3599,8329,7662],{"class":3769},[3599,8331,3773],{"class":3755},[3599,8333,8334,8336,8338,8340,8343,8345,8347],{"class":3601,"line":4781},[3599,8335,7669],{"class":3755},[3599,8337,3599],{"class":3759},[3599,8339,4003],{"class":3755},[3599,8341,8342],{"class":3616},"Skew X (Нахил X)",[3599,8344,4389],{"class":3755},[3599,8346,3599],{"class":3759},[3599,8348,3773],{"class":3755},[3599,8350,8351,8353,8355,8357,8359,8362,8364,8366,8368,8370,8372,8374,8376],{"class":3601,"line":4787},[3599,8352,7669],{"class":3755},[3599,8354,3599],{"class":3759},[3599,8356,7691],{"class":3623},[3599,8358,3766],{"class":3616},[3599,8360,8361],{"class":3769},"\"skewXVal\"",[3599,8363,3763],{"class":3623},[3599,8365,3766],{"class":3616},[3599,8367,7703],{"class":3769},[3599,8369,4003],{"class":3755},[3599,8371,7884],{"class":3616},[3599,8373,4389],{"class":3755},[3599,8375,3599],{"class":3759},[3599,8377,3773],{"class":3755},[3599,8379,8380,8382,8384],{"class":3601,"line":4797},[3599,8381,7719],{"class":3755},[3599,8383,3820],{"class":3759},[3599,8385,3773],{"class":3755},[3599,8387,8388,8390,8392,8394,8396,8398,8400,8402,8405,8407,8409,8412,8414,8416,8419,8421,8423,8425,8427,8429,8432,8434,8436,8438,8440,8442,8444,8446,8448],{"class":3601,"line":4822},[3599,8389,7653],{"class":3755},[3599,8391,5196],{"class":3759},[3599,8393,5199],{"class":3623},[3599,8395,3766],{"class":3616},[3599,8397,7736],{"class":3769},[3599,8399,7739],{"class":3623},[3599,8401,3766],{"class":3616},[3599,8403,8404],{"class":3769},"\"-30\"",[3599,8406,7747],{"class":3623},[3599,8408,3766],{"class":3616},[3599,8410,8411],{"class":3769},"\"30\"",[3599,8413,7755],{"class":3623},[3599,8415,3766],{"class":3616},[3599,8417,8418],{"class":3769},"\"2\"",[3599,8420,7763],{"class":3623},[3599,8422,3766],{"class":3616},[3599,8424,7938],{"class":3769},[3599,8426,7691],{"class":3623},[3599,8428,3766],{"class":3616},[3599,8430,8431],{"class":3769},"\"skewXRange\"",[3599,8433,7778],{"class":3623},[3599,8435,3766],{"class":3616},[3599,8437,7783],{"class":3769},[3599,8439,7786],{"class":3674},[3599,8441,7789],{"class":3769},[3599,8443,3763],{"class":3623},[3599,8445,3766],{"class":3616},[3599,8447,7796],{"class":3769},[3599,8449,3773],{"class":3755},[3599,8451,8452,8454,8456],{"class":3601,"line":4847},[3599,8453,4790],{"class":3755},[3599,8455,3820],{"class":3759},[3599,8457,3773],{"class":3755},[3599,8459,8460],{"class":3601,"line":4856},[3599,8461,3779],{"emptyLinePlaceholder":3778},[3599,8463,8464],{"class":3601,"line":4861},[3599,8465,8466],{"class":3605},"                \u003C!-- Origin -->\n",[3599,8468,8469,8471,8473,8475,8477,8479],{"class":3601,"line":4875},[3599,8470,4761],{"class":3755},[3599,8472,3820],{"class":3759},[3599,8474,3763],{"class":3623},[3599,8476,3766],{"class":3616},[3599,8478,7646],{"class":3769},[3599,8480,3773],{"class":3755},[3599,8482,8483,8485,8488,8490,8492,8495,8497,8500,8502,8504],{"class":3601,"line":4881},[3599,8484,7653],{"class":3755},[3599,8486,8487],{"class":3759},"label",[3599,8489,3763],{"class":3623},[3599,8491,3766],{"class":3616},[3599,8493,8494],{"class":3769},"\"block text-xs font-semibold text-slate-600\"",[3599,8496,4003],{"class":3755},[3599,8498,8499],{"class":3616},"Origin (Точка обертання)",[3599,8501,4389],{"class":3755},[3599,8503,8487],{"class":3759},[3599,8505,3773],{"class":3755},[3599,8507,8508,8510,8513,8515,8517,8520,8523,8525,8527,8529,8531,8533,8535,8538],{"class":3601,"line":4887},[3599,8509,7653],{"class":3755},[3599,8511,8512],{"class":3759},"select",[3599,8514,7691],{"class":3623},[3599,8516,3766],{"class":3616},[3599,8518,8519],{"class":3769},"\"originSelect\"",[3599,8521,8522],{"class":3623}," onchange",[3599,8524,3766],{"class":3616},[3599,8526,7783],{"class":3769},[3599,8528,7786],{"class":3674},[3599,8530,7789],{"class":3769},[3599,8532,3763],{"class":3623},[3599,8534,3766],{"class":3616},[3599,8536,8537],{"class":3769},"\"w-full text-xs bg-white border border-slate-200 rounded-lg p-2 focus:outline-none\"",[3599,8539,3773],{"class":3755},[3599,8541,8542,8544,8547,8549,8551,8553,8555,8558,8560,8562],{"class":3601,"line":4895},[3599,8543,7669],{"class":3755},[3599,8545,8546],{"class":3759},"option",[3599,8548,7763],{"class":3623},[3599,8550,3766],{"class":3616},[3599,8552,7162],{"class":3769},[3599,8554,4003],{"class":3755},[3599,8556,8557],{"class":3616},"origin-center (Центр)",[3599,8559,4389],{"class":3755},[3599,8561,8546],{"class":3759},[3599,8563,3773],{"class":3755},[3599,8565,8566,8568,8570,8572,8574,8576,8578,8581,8583,8585],{"class":3601,"line":4911},[3599,8567,7669],{"class":3755},[3599,8569,8546],{"class":3759},[3599,8571,7763],{"class":3623},[3599,8573,3766],{"class":3616},[3599,8575,7294],{"class":3769},[3599,8577,4003],{"class":3755},[3599,8579,8580],{"class":3616},"origin-top-left (Верхній лівий)",[3599,8582,4389],{"class":3755},[3599,8584,8546],{"class":3759},[3599,8586,3773],{"class":3755},[3599,8588,8589,8591,8593,8595,8597,8599,8601,8604,8606,8608],{"class":3601,"line":4917},[3599,8590,7669],{"class":3755},[3599,8592,8546],{"class":3759},[3599,8594,7763],{"class":3623},[3599,8596,3766],{"class":3616},[3599,8598,7198],{"class":3769},[3599,8600,4003],{"class":3755},[3599,8602,8603],{"class":3616},"origin-top-right (Верхній правий)",[3599,8605,4389],{"class":3755},[3599,8607,8546],{"class":3759},[3599,8609,3773],{"class":3755},[3599,8611,8612,8614,8616,8618,8620,8622,8624,8627,8629,8631],{"class":3601,"line":4926},[3599,8613,7669],{"class":3755},[3599,8615,8546],{"class":3759},[3599,8617,7763],{"class":3623},[3599,8619,3766],{"class":3616},[3599,8621,7264],{"class":3769},[3599,8623,4003],{"class":3755},[3599,8625,8626],{"class":3616},"origin-bottom-left (Нижній лівий)",[3599,8628,4389],{"class":3755},[3599,8630,8546],{"class":3759},[3599,8632,3773],{"class":3755},[3599,8634,8635,8637,8639,8641,8643,8645,8647,8650,8652,8654],{"class":3601,"line":4950},[3599,8636,7669],{"class":3755},[3599,8638,8546],{"class":3759},[3599,8640,7763],{"class":3623},[3599,8642,3766],{"class":3616},[3599,8644,7234],{"class":3769},[3599,8646,4003],{"class":3755},[3599,8648,8649],{"class":3616},"origin-bottom-right (Нижній правий)",[3599,8651,4389],{"class":3755},[3599,8653,8546],{"class":3759},[3599,8655,3773],{"class":3755},[3599,8657,8658,8660,8662],{"class":3601,"line":4974},[3599,8659,7719],{"class":3755},[3599,8661,8512],{"class":3759},[3599,8663,3773],{"class":3755},[3599,8665,8666,8668,8670],{"class":3601,"line":4983},[3599,8667,4790],{"class":3755},[3599,8669,3820],{"class":3759},[3599,8671,3773],{"class":3755},[3599,8673,8674,8676,8678],{"class":3601,"line":4988},[3599,8675,4458],{"class":3755},[3599,8677,3820],{"class":3759},[3599,8679,3773],{"class":3755},[3599,8681,8682],{"class":3601,"line":5002},[3599,8683,3779],{"emptyLinePlaceholder":3778},[3599,8685,8686],{"class":3601,"line":5007},[3599,8687,8688],{"class":3605},"            \u003C!-- Visual Target Display -->\n",[3599,8690,8691,8693,8695,8697,8699,8702],{"class":3601,"line":5013},[3599,8692,4422],{"class":3755},[3599,8694,3820],{"class":3759},[3599,8696,3763],{"class":3623},[3599,8698,3766],{"class":3616},[3599,8700,8701],{"class":3769},"\"h-64 flex flex-col items-center justify-center border border-slate-100 rounded-xl bg-slate-50\u002F50 p-4 relative overflow-hidden\"",[3599,8703,3773],{"class":3755},[3599,8705,8706],{"class":3601,"line":5020},[3599,8707,8708],{"class":3605},"                \u003C!-- Helper Dot showing origin point -->\n",[3599,8710,8711,8713,8715,8717,8719,8722,8724,8726,8729,8731,8733,8736,8738,8740],{"class":3601,"line":5036},[3599,8712,4761],{"class":3755},[3599,8714,3820],{"class":3759},[3599,8716,7691],{"class":3623},[3599,8718,3766],{"class":3616},[3599,8720,8721],{"class":3769},"\"originDot\"",[3599,8723,3763],{"class":3623},[3599,8725,3766],{"class":3616},[3599,8727,8728],{"class":3769},"\"absolute w-2 h-2 bg-red-500 rounded-full z-10\"",[3599,8730,4342],{"class":3623},[3599,8732,3766],{"class":3616},[3599,8734,8735],{"class":3769},"\"left:50%; top:50%; margin-left:-4px; margin-top:-4px;\"",[3599,8737,7122],{"class":3755},[3599,8739,3820],{"class":3759},[3599,8741,3773],{"class":3755},[3599,8743,8744],{"class":3601,"line":5042},[3599,8745,8746],{"class":3616},"                \n",[3599,8748,8749],{"class":3601,"line":5051},[3599,8750,8751],{"class":3605},"                \u003C!-- Target Card -->\n",[3599,8753,8754,8756,8758,8760,8762,8765,8767,8769,8772],{"class":3601,"line":5075},[3599,8755,4761],{"class":3755},[3599,8757,3820],{"class":3759},[3599,8759,7691],{"class":3623},[3599,8761,3766],{"class":3616},[3599,8763,8764],{"class":3769},"\"transformTarget\"",[3599,8766,3763],{"class":3623},[3599,8768,3766],{"class":3616},[3599,8770,8771],{"class":3769},"\"w-28 h-28 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl flex flex-col items-center justify-center text-white shadow-lg transition-transform duration-100 ease-out origin-center\"",[3599,8773,3773],{"class":3755},[3599,8775,8776,8778,8780,8782,8784,8787,8789,8792,8794,8796],{"class":3601,"line":5099},[3599,8777,7653],{"class":3755},[3599,8779,3599],{"class":3759},[3599,8781,3763],{"class":3623},[3599,8783,3766],{"class":3616},[3599,8785,8786],{"class":3769},"\"text-3xl\"",[3599,8788,4003],{"class":3755},[3599,8790,8791],{"class":3616},"🚀",[3599,8793,4389],{"class":3755},[3599,8795,3599],{"class":3759},[3599,8797,3773],{"class":3755},[3599,8799,8800,8802,8804,8806,8808,8811,8813,8816,8818,8820],{"class":3601,"line":5108},[3599,8801,7653],{"class":3755},[3599,8803,3599],{"class":3759},[3599,8805,3763],{"class":3623},[3599,8807,3766],{"class":3616},[3599,8809,8810],{"class":3769},"\"text-[10px] font-bold mt-1 uppercase tracking-wider\"",[3599,8812,4003],{"class":3755},[3599,8814,8815],{"class":3616},"Transform",[3599,8817,4389],{"class":3755},[3599,8819,3599],{"class":3759},[3599,8821,3773],{"class":3755},[3599,8823,8824,8826,8828],{"class":3601,"line":5113},[3599,8825,4790],{"class":3755},[3599,8827,3820],{"class":3759},[3599,8829,3773],{"class":3755},[3599,8831,8832,8834,8836],{"class":3601,"line":5122},[3599,8833,4458],{"class":3755},[3599,8835,3820],{"class":3759},[3599,8837,3773],{"class":3755},[3599,8839,8840,8842,8844],{"class":3601,"line":5131},[3599,8841,4642],{"class":3755},[3599,8843,3820],{"class":3759},[3599,8845,3773],{"class":3755},[3599,8847,8848],{"class":3601,"line":5136},[3599,8849,3779],{"emptyLinePlaceholder":3778},[3599,8851,8852],{"class":3601,"line":5142},[3599,8853,8854],{"class":3605},"        \u003C!-- Class display -->\n",[3599,8856,8857,8859,8861],{"class":3601,"line":5151},[3599,8858,4372],{"class":3755},[3599,8860,3820],{"class":3759},[3599,8862,3773],{"class":3755},[3599,8864,8865,8867,8869,8871,8873,8876,8878,8881,8883,8885],{"class":3601,"line":5175},[3599,8866,4422],{"class":3755},[3599,8868,8487],{"class":3759},[3599,8870,3763],{"class":3623},[3599,8872,3766],{"class":3616},[3599,8874,8875],{"class":3769},"\"block text-xs font-semibold text-slate-500 uppercase mb-2\"",[3599,8877,4003],{"class":3755},[3599,8879,8880],{"class":3616},"Generated Tailwind Classes",[3599,8882,4389],{"class":3755},[3599,8884,8487],{"class":3759},[3599,8886,3773],{"class":3755},[3599,8888,8889,8891,8893,8895,8897,8900,8902,8904,8907],{"class":3601,"line":5191},[3599,8890,4422],{"class":3755},[3599,8892,3820],{"class":3759},[3599,8894,3763],{"class":3623},[3599,8896,3766],{"class":3616},[3599,8898,8899],{"class":3769},"\"bg-slate-900 text-slate-300 rounded-lg p-3 text-xs font-mono break-all leading-normal shadow-inner\"",[3599,8901,7691],{"class":3623},[3599,8903,3766],{"class":3616},[3599,8905,8906],{"class":3769},"\"classDisplay\"",[3599,8908,3773],{"class":3755},[3599,8910,8911],{"class":3601,"line":5215},[3599,8912,8913],{"class":3616},"                scale-[1] rotate-[0deg] translate-x-[0px] translate-y-[0px] skew-x-[0deg] origin-center\n",[3599,8915,8916,8918,8920],{"class":3601,"line":5226},[3599,8917,4458],{"class":3755},[3599,8919,3820],{"class":3759},[3599,8921,3773],{"class":3755},[3599,8923,8924,8926,8928],{"class":3601,"line":5232},[3599,8925,4642],{"class":3755},[3599,8927,3820],{"class":3759},[3599,8929,3773],{"class":3755},[3599,8931,8932,8934,8936],{"class":3601,"line":5238},[3599,8933,4652],{"class":3755},[3599,8935,3820],{"class":3759},[3599,8937,3773],{"class":3755},[3599,8939,8940],{"class":3601,"line":5246},[3599,8941,3779],{"emptyLinePlaceholder":3778},[3599,8943,8944,8946,8948],{"class":3601,"line":5251},[3599,8945,4363],{"class":3755},[3599,8947,7478],{"class":3759},[3599,8949,3773],{"class":3755},[3599,8951,8952,8956,8959],{"class":3601,"line":5271},[3599,8953,8955],{"class":8954},"su1O8","        function",[3599,8957,8958],{"class":3674}," applyTransforms",[3599,8960,8961],{"class":7484},"() {\n",[3599,8963,8964,8967,8971,8974,8978,8981,8984,8986,8990,8992,8995],{"class":3601,"line":5280},[3599,8965,8966],{"class":8954},"            const",[3599,8968,8970],{"class":8969},"s-QsJ"," scale",[3599,8972,8973],{"class":3616}," =",[3599,8975,8977],{"class":8976},"siwwj"," document",[3599,8979,8980],{"class":7484},".",[3599,8982,8983],{"class":3674},"getElementById",[3599,8985,3678],{"class":7484},[3599,8987,8989],{"class":8988},"sbdoH","'scaleRange'",[3599,8991,3961],{"class":7484},[3599,8993,8994],{"class":8976},"value",[3599,8996,3714],{"class":7484},[3599,8998,8999,9001,9004,9006,9008,9010,9012,9014,9017,9019,9021],{"class":3601,"line":5286},[3599,9000,8966],{"class":8954},[3599,9002,9003],{"class":8969}," rotate",[3599,9005,8973],{"class":3616},[3599,9007,8977],{"class":8976},[3599,9009,8980],{"class":7484},[3599,9011,8983],{"class":3674},[3599,9013,3678],{"class":7484},[3599,9015,9016],{"class":8988},"'rotateRange'",[3599,9018,3961],{"class":7484},[3599,9020,8994],{"class":8976},[3599,9022,3714],{"class":7484},[3599,9024,9025,9027,9030,9032,9034,9036,9038,9040,9043,9045,9047],{"class":3601,"line":5292},[3599,9026,8966],{"class":8954},[3599,9028,9029],{"class":8969}," transX",[3599,9031,8973],{"class":3616},[3599,9033,8977],{"class":8976},[3599,9035,8980],{"class":7484},[3599,9037,8983],{"class":3674},[3599,9039,3678],{"class":7484},[3599,9041,9042],{"class":8988},"'transXRange'",[3599,9044,3961],{"class":7484},[3599,9046,8994],{"class":8976},[3599,9048,3714],{"class":7484},[3599,9050,9051,9053,9056,9058,9060,9062,9064,9066,9069,9071,9073],{"class":3601,"line":5299},[3599,9052,8966],{"class":8954},[3599,9054,9055],{"class":8969}," transY",[3599,9057,8973],{"class":3616},[3599,9059,8977],{"class":8976},[3599,9061,8980],{"class":7484},[3599,9063,8983],{"class":3674},[3599,9065,3678],{"class":7484},[3599,9067,9068],{"class":8988},"'transYRange'",[3599,9070,3961],{"class":7484},[3599,9072,8994],{"class":8976},[3599,9074,3714],{"class":7484},[3599,9076,9077,9079,9082,9084,9086,9088,9090,9092,9095,9097,9099],{"class":3601,"line":5308},[3599,9078,8966],{"class":8954},[3599,9080,9081],{"class":8969}," skewX",[3599,9083,8973],{"class":3616},[3599,9085,8977],{"class":8976},[3599,9087,8980],{"class":7484},[3599,9089,8983],{"class":3674},[3599,9091,3678],{"class":7484},[3599,9093,9094],{"class":8988},"'skewXRange'",[3599,9096,3961],{"class":7484},[3599,9098,8994],{"class":8976},[3599,9100,3714],{"class":7484},[3599,9102,9103,9105,9108,9110,9112,9114,9116,9118,9121,9123,9125],{"class":3601,"line":5317},[3599,9104,8966],{"class":8954},[3599,9106,9107],{"class":8969}," origin",[3599,9109,8973],{"class":3616},[3599,9111,8977],{"class":8976},[3599,9113,8980],{"class":7484},[3599,9115,8983],{"class":3674},[3599,9117,3678],{"class":7484},[3599,9119,9120],{"class":8988},"'originSelect'",[3599,9122,3961],{"class":7484},[3599,9124,8994],{"class":8976},[3599,9126,3714],{"class":7484},[3599,9128,9129],{"class":3601,"line":5322},[3599,9130,3779],{"emptyLinePlaceholder":3778},[3599,9132,9134],{"class":3601,"line":9133},104,[3599,9135,9136],{"class":3605},"            \u002F\u002F Update Labels\n",[3599,9138,9140,9143,9145,9147,9149,9152,9154,9157,9159,9162,9164,9167,9169,9172,9174,9176],{"class":3601,"line":9139},105,[3599,9141,9142],{"class":8976},"            document",[3599,9144,8980],{"class":7484},[3599,9146,8983],{"class":3674},[3599,9148,3678],{"class":7484},[3599,9150,9151],{"class":8988},"'scaleVal'",[3599,9153,3961],{"class":7484},[3599,9155,9156],{"class":8976},"textContent",[3599,9158,8973],{"class":3616},[3599,9160,9161],{"class":3674}," parseFloat",[3599,9163,3678],{"class":7484},[3599,9165,9166],{"class":8976},"scale",[3599,9168,3961],{"class":7484},[3599,9170,9171],{"class":3674},"toFixed",[3599,9173,3678],{"class":7484},[3599,9175,3697],{"class":3681},[3599,9177,3700],{"class":7484},[3599,9179,9181,9183,9185,9187,9189,9192,9194,9196,9198,9200,9203,9206],{"class":3601,"line":9180},106,[3599,9182,9142],{"class":8976},[3599,9184,8980],{"class":7484},[3599,9186,8983],{"class":3674},[3599,9188,3678],{"class":7484},[3599,9190,9191],{"class":8988},"'rotateVal'",[3599,9193,3961],{"class":7484},[3599,9195,9156],{"class":8976},[3599,9197,8973],{"class":3616},[3599,9199,9003],{"class":8976},[3599,9201,9202],{"class":3616}," +",[3599,9204,9205],{"class":8988}," '°'",[3599,9207,3714],{"class":7484},[3599,9209,9211,9213,9215,9217,9219,9222,9224,9226,9228,9230,9232,9235],{"class":3601,"line":9210},107,[3599,9212,9142],{"class":8976},[3599,9214,8980],{"class":7484},[3599,9216,8983],{"class":3674},[3599,9218,3678],{"class":7484},[3599,9220,9221],{"class":8988},"'transXVal'",[3599,9223,3961],{"class":7484},[3599,9225,9156],{"class":8976},[3599,9227,8973],{"class":3616},[3599,9229,9029],{"class":8976},[3599,9231,9202],{"class":3616},[3599,9233,9234],{"class":8988}," 'px'",[3599,9236,3714],{"class":7484},[3599,9238,9240,9242,9244,9246,9248,9251,9253,9255,9257,9259,9261,9263],{"class":3601,"line":9239},108,[3599,9241,9142],{"class":8976},[3599,9243,8980],{"class":7484},[3599,9245,8983],{"class":3674},[3599,9247,3678],{"class":7484},[3599,9249,9250],{"class":8988},"'transYVal'",[3599,9252,3961],{"class":7484},[3599,9254,9156],{"class":8976},[3599,9256,8973],{"class":3616},[3599,9258,9055],{"class":8976},[3599,9260,9202],{"class":3616},[3599,9262,9234],{"class":8988},[3599,9264,3714],{"class":7484},[3599,9266,9268,9270,9272,9274,9276,9279,9281,9283,9285,9287,9289,9291],{"class":3601,"line":9267},109,[3599,9269,9142],{"class":8976},[3599,9271,8980],{"class":7484},[3599,9273,8983],{"class":3674},[3599,9275,3678],{"class":7484},[3599,9277,9278],{"class":8988},"'skewXVal'",[3599,9280,3961],{"class":7484},[3599,9282,9156],{"class":8976},[3599,9284,8973],{"class":3616},[3599,9286,9081],{"class":8976},[3599,9288,9202],{"class":3616},[3599,9290,9205],{"class":8988},[3599,9292,3714],{"class":7484},[3599,9294,9296],{"class":3601,"line":9295},110,[3599,9297,3779],{"emptyLinePlaceholder":3778},[3599,9299,9301],{"class":3601,"line":9300},111,[3599,9302,9303],{"class":3605},"            \u002F\u002F Apply style to target\n",[3599,9305,9307,9309,9312,9314,9316,9318,9320,9322,9325],{"class":3601,"line":9306},112,[3599,9308,8966],{"class":8954},[3599,9310,9311],{"class":8969}," target",[3599,9313,8973],{"class":3616},[3599,9315,8977],{"class":8976},[3599,9317,8980],{"class":7484},[3599,9319,8983],{"class":3674},[3599,9321,3678],{"class":7484},[3599,9323,9324],{"class":8988},"'transformTarget'",[3599,9326,3700],{"class":7484},[3599,9328,9330,9333,9335,9338,9340,9343,9346,9349,9352,9355],{"class":3601,"line":9329},113,[3599,9331,9332],{"class":8976},"            target",[3599,9334,8980],{"class":7484},[3599,9336,9337],{"class":8976},"className",[3599,9339,8973],{"class":3616},[3599,9341,9342],{"class":8988}," `w-28 h-28 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl flex flex-col items-center justify-center text-white shadow-lg transition-transform duration-100 ease-out ",[3599,9344,9345],{"class":8954},"${",[3599,9347,9348],{"class":8976},"origin",[3599,9350,9351],{"class":8954},"}",[3599,9353,9354],{"class":8988},"`",[3599,9356,3714],{"class":7484},[3599,9358,9360,9362,9364,9367,9369,9371,9373,9376,9378,9380,9382,9385,9387,9390,9392,9395,9397,9400,9402,9405,9407,9410,9412,9415,9417,9420,9422,9425],{"class":3601,"line":9359},114,[3599,9361,9332],{"class":8976},[3599,9363,8980],{"class":7484},[3599,9365,9366],{"class":8976},"style",[3599,9368,8980],{"class":7484},[3599,9370,5479],{"class":8976},[3599,9372,8973],{"class":3616},[3599,9374,9375],{"class":8988}," `scale(",[3599,9377,9345],{"class":8954},[3599,9379,9166],{"class":8976},[3599,9381,9351],{"class":8954},[3599,9383,9384],{"class":8988},") rotate(",[3599,9386,9345],{"class":8954},[3599,9388,9389],{"class":8976},"rotate",[3599,9391,9351],{"class":8954},[3599,9393,9394],{"class":8988},"deg) translate(",[3599,9396,9345],{"class":8954},[3599,9398,9399],{"class":8976},"transX",[3599,9401,9351],{"class":8954},[3599,9403,9404],{"class":8988},"px, ",[3599,9406,9345],{"class":8954},[3599,9408,9409],{"class":8976},"transY",[3599,9411,9351],{"class":8954},[3599,9413,9414],{"class":8988},"px) skewX(",[3599,9416,9345],{"class":8954},[3599,9418,9419],{"class":8976},"skewX",[3599,9421,9351],{"class":8954},[3599,9423,9424],{"class":8988},"deg)`",[3599,9426,3714],{"class":7484},[3599,9428,9430],{"class":3601,"line":9429},115,[3599,9431,3779],{"emptyLinePlaceholder":3778},[3599,9433,9435],{"class":3601,"line":9434},116,[3599,9436,9437],{"class":3605},"            \u002F\u002F Update Origin Dot Position\n",[3599,9439,9441,9443,9446,9448,9450,9452,9454,9456,9459],{"class":3601,"line":9440},117,[3599,9442,8966],{"class":8954},[3599,9444,9445],{"class":8969}," dot",[3599,9447,8973],{"class":3616},[3599,9449,8977],{"class":8976},[3599,9451,8980],{"class":7484},[3599,9453,8983],{"class":3674},[3599,9455,3678],{"class":7484},[3599,9457,9458],{"class":8988},"'originDot'",[3599,9460,3700],{"class":7484},[3599,9462,9464,9468,9470,9472,9475,9478,9481,9484,9486,9488,9490,9493,9495,9498,9501,9503,9505,9507,9509,9512,9514,9516],{"class":3601,"line":9463},118,[3599,9465,9467],{"class":9466},"s8xlr","            if",[3599,9469,3973],{"class":7484},[3599,9471,9348],{"class":8976},[3599,9473,9474],{"class":3616}," ===",[3599,9476,9477],{"class":8988}," 'origin-center'",[3599,9479,9480],{"class":7484},") { ",[3599,9482,9483],{"class":8976},"dot",[3599,9485,8980],{"class":7484},[3599,9487,9366],{"class":8976},[3599,9489,8980],{"class":7484},[3599,9491,9492],{"class":8976},"left",[3599,9494,8973],{"class":3616},[3599,9496,9497],{"class":8988}," '50%'",[3599,9499,9500],{"class":7484},"; ",[3599,9502,9483],{"class":8976},[3599,9504,8980],{"class":7484},[3599,9506,9366],{"class":8976},[3599,9508,8980],{"class":7484},[3599,9510,9511],{"class":8976},"top",[3599,9513,8973],{"class":3616},[3599,9515,9497],{"class":8988},[3599,9517,9518],{"class":7484},"; }\n",[3599,9520,9522,9525,9528,9530,9532,9534,9537,9539,9541,9543,9545,9547,9549,9551,9554,9556,9558,9560,9562,9564,9566,9568,9570],{"class":3601,"line":9521},119,[3599,9523,9524],{"class":9466},"            else",[3599,9526,9527],{"class":9466}," if",[3599,9529,3973],{"class":7484},[3599,9531,9348],{"class":8976},[3599,9533,9474],{"class":3616},[3599,9535,9536],{"class":8988}," 'origin-top-left'",[3599,9538,9480],{"class":7484},[3599,9540,9483],{"class":8976},[3599,9542,8980],{"class":7484},[3599,9544,9366],{"class":8976},[3599,9546,8980],{"class":7484},[3599,9548,9492],{"class":8976},[3599,9550,8973],{"class":3616},[3599,9552,9553],{"class":8988}," 'calc(50% - 56px)'",[3599,9555,9500],{"class":7484},[3599,9557,9483],{"class":8976},[3599,9559,8980],{"class":7484},[3599,9561,9366],{"class":8976},[3599,9563,8980],{"class":7484},[3599,9565,9511],{"class":8976},[3599,9567,8973],{"class":3616},[3599,9569,9553],{"class":8988},[3599,9571,9518],{"class":7484},[3599,9573,9575,9577,9579,9581,9583,9585,9588,9590,9592,9594,9596,9598,9600,9602,9605,9607,9609,9611,9613,9615,9617,9619,9621],{"class":3601,"line":9574},120,[3599,9576,9524],{"class":9466},[3599,9578,9527],{"class":9466},[3599,9580,3973],{"class":7484},[3599,9582,9348],{"class":8976},[3599,9584,9474],{"class":3616},[3599,9586,9587],{"class":8988}," 'origin-top-right'",[3599,9589,9480],{"class":7484},[3599,9591,9483],{"class":8976},[3599,9593,8980],{"class":7484},[3599,9595,9366],{"class":8976},[3599,9597,8980],{"class":7484},[3599,9599,9492],{"class":8976},[3599,9601,8973],{"class":3616},[3599,9603,9604],{"class":8988}," 'calc(50% + 56px)'",[3599,9606,9500],{"class":7484},[3599,9608,9483],{"class":8976},[3599,9610,8980],{"class":7484},[3599,9612,9366],{"class":8976},[3599,9614,8980],{"class":7484},[3599,9616,9511],{"class":8976},[3599,9618,8973],{"class":3616},[3599,9620,9553],{"class":8988},[3599,9622,9518],{"class":7484},[3599,9624,9626,9628,9630,9632,9634,9636,9639,9641,9643,9645,9647,9649,9651,9653,9655,9657,9659,9661,9663,9665,9667,9669,9671],{"class":3601,"line":9625},121,[3599,9627,9524],{"class":9466},[3599,9629,9527],{"class":9466},[3599,9631,3973],{"class":7484},[3599,9633,9348],{"class":8976},[3599,9635,9474],{"class":3616},[3599,9637,9638],{"class":8988}," 'origin-bottom-left'",[3599,9640,9480],{"class":7484},[3599,9642,9483],{"class":8976},[3599,9644,8980],{"class":7484},[3599,9646,9366],{"class":8976},[3599,9648,8980],{"class":7484},[3599,9650,9492],{"class":8976},[3599,9652,8973],{"class":3616},[3599,9654,9553],{"class":8988},[3599,9656,9500],{"class":7484},[3599,9658,9483],{"class":8976},[3599,9660,8980],{"class":7484},[3599,9662,9366],{"class":8976},[3599,9664,8980],{"class":7484},[3599,9666,9511],{"class":8976},[3599,9668,8973],{"class":3616},[3599,9670,9604],{"class":8988},[3599,9672,9518],{"class":7484},[3599,9674,9676,9678,9680,9682,9684,9686,9689,9691,9693,9695,9697,9699,9701,9703,9705,9707,9709,9711,9713,9715,9717,9719,9721],{"class":3601,"line":9675},122,[3599,9677,9524],{"class":9466},[3599,9679,9527],{"class":9466},[3599,9681,3973],{"class":7484},[3599,9683,9348],{"class":8976},[3599,9685,9474],{"class":3616},[3599,9687,9688],{"class":8988}," 'origin-bottom-right'",[3599,9690,9480],{"class":7484},[3599,9692,9483],{"class":8976},[3599,9694,8980],{"class":7484},[3599,9696,9366],{"class":8976},[3599,9698,8980],{"class":7484},[3599,9700,9492],{"class":8976},[3599,9702,8973],{"class":3616},[3599,9704,9604],{"class":8988},[3599,9706,9500],{"class":7484},[3599,9708,9483],{"class":8976},[3599,9710,8980],{"class":7484},[3599,9712,9366],{"class":8976},[3599,9714,8980],{"class":7484},[3599,9716,9511],{"class":8976},[3599,9718,8973],{"class":3616},[3599,9720,9604],{"class":8988},[3599,9722,9518],{"class":7484},[3599,9724,9726],{"class":3601,"line":9725},123,[3599,9727,3779],{"emptyLinePlaceholder":3778},[3599,9729,9731],{"class":3601,"line":9730},124,[3599,9732,9733],{"class":3605},"            \u002F\u002F Display classes\n",[3599,9735,9737,9739,9742,9744,9747,9749,9751,9753,9756,9758,9760,9762,9765,9767,9769,9771,9774,9776,9778,9780,9783,9785,9787,9789,9792,9794,9796,9798,9800],{"class":3601,"line":9736},125,[3599,9738,8966],{"class":8954},[3599,9740,9741],{"class":8969}," generatedClasses",[3599,9743,8973],{"class":3616},[3599,9745,9746],{"class":8988}," `scale-[",[3599,9748,9345],{"class":8954},[3599,9750,9166],{"class":8976},[3599,9752,9351],{"class":8954},[3599,9754,9755],{"class":8988},"] rotate-[",[3599,9757,9345],{"class":8954},[3599,9759,9389],{"class":8976},[3599,9761,9351],{"class":8954},[3599,9763,9764],{"class":8988},"deg] translate-x-[",[3599,9766,9345],{"class":8954},[3599,9768,9399],{"class":8976},[3599,9770,9351],{"class":8954},[3599,9772,9773],{"class":8988},"px] translate-y-[",[3599,9775,9345],{"class":8954},[3599,9777,9409],{"class":8976},[3599,9779,9351],{"class":8954},[3599,9781,9782],{"class":8988},"px] skew-x-[",[3599,9784,9345],{"class":8954},[3599,9786,9419],{"class":8976},[3599,9788,9351],{"class":8954},[3599,9790,9791],{"class":8988},"deg] ",[3599,9793,9345],{"class":8954},[3599,9795,9348],{"class":8976},[3599,9797,9351],{"class":8954},[3599,9799,9354],{"class":8988},[3599,9801,3714],{"class":7484},[3599,9803,9805,9807,9809,9811,9813,9816,9818,9820,9822,9824],{"class":3601,"line":9804},126,[3599,9806,9142],{"class":8976},[3599,9808,8980],{"class":7484},[3599,9810,8983],{"class":3674},[3599,9812,3678],{"class":7484},[3599,9814,9815],{"class":8988},"'classDisplay'",[3599,9817,3961],{"class":7484},[3599,9819,9156],{"class":8976},[3599,9821,8973],{"class":3616},[3599,9823,9741],{"class":8976},[3599,9825,3714],{"class":7484},[3599,9827,9829],{"class":3601,"line":9828},127,[3599,9830,9831],{"class":7484},"        }\n",[3599,9833,9835],{"class":3601,"line":9834},128,[3599,9836,3779],{"emptyLinePlaceholder":3778},[3599,9838,9840],{"class":3601,"line":9839},129,[3599,9841,9842],{"class":3605},"        \u002F\u002F Initialize\n",[3599,9844,9846,9849],{"class":3601,"line":9845},130,[3599,9847,9848],{"class":3674},"        applyTransforms",[3599,9850,9851],{"class":7484},"();\n",[3599,9853,9855,9857,9859],{"class":3601,"line":9854},131,[3599,9856,4652],{"class":3755},[3599,9858,7478],{"class":3759},[3599,9860,3773],{"class":3755},[3599,9862,9864,9866,9868],{"class":3601,"line":9863},132,[3599,9865,4389],{"class":3755},[3599,9867,7533],{"class":3759},[3599,9869,3773],{"class":3755},[3599,9871,9873,9875,9877],{"class":3601,"line":9872},133,[3599,9874,4389],{"class":3755},[3599,9876,3743],{"class":3759},[3599,9878,3773],{"class":3755},[3409,9880],{},[3348,9882,9884,9885],{"id":9883},"частина-ііі-keyframe-анімації-animate","Частина ІІІ. Keyframe-анімації: ",[3392,9886,9887],{},"animate-*",[3416,9889,9891],{"id":9890},"_31-вбудовані-анімації-tailwind","3.1. Вбудовані анімації Tailwind",[3353,9893,9894],{},"Tailwind постачається з невеликим, але практичним набором вбудованих keyframe-анімацій:",[3443,9896,9897,9910],{},[3446,9898,9899],{},[3449,9900,9901,9904,9907],{},[3452,9902,9903],{},"Клас",[3452,9905,9906],{},"Опис",[3452,9908,9909],{},"Використання",[3462,9911,9912,9925,9938,9951,9964],{},[3449,9913,9914,9919,9922],{},[3467,9915,9916],{},[3392,9917,9918],{},"animate-spin",[3467,9920,9921],{},"Нескінченне обертання (360°)",[3467,9923,9924],{},"Spinner, лоадер",[3449,9926,9927,9932,9935],{},[3467,9928,9929],{},[3392,9930,9931],{},"animate-ping",[3467,9933,9934],{},"Пульсуючий розширюючийся ring",[3467,9936,9937],{},"Notification badge, статус «онлайн»",[3449,9939,9940,9945,9948],{},[3467,9941,9942],{},[3392,9943,9944],{},"animate-pulse",[3467,9946,9947],{},"Плавне мерехтіння opacity 100%→50%",[3467,9949,9950],{},"Skeleton loader",[3449,9952,9953,9958,9961],{},[3467,9954,9955],{},[3392,9956,9957],{},"animate-bounce",[3467,9959,9960],{},"Підстрибування вгору-вниз",[3467,9962,9963],{},"Scroll-down стрілка, attention-getter",[3449,9965,9966,9971,9974],{},[3467,9967,9968],{},[3392,9969,9970],{},"animate-none",[3467,9972,9973],{},"Відключити анімацію",[3467,9975,9976],{},"Перевизначення",[3430,9978,9980],{"className":3741,"code":9979,"language":3743,"meta":3438,"style":3438},"\u003C!-- Spinner: обертання -->\n\u003Cdiv class=\"animate-spin size-6 border-2 border-indigo-600 border-t-transparent rounded-full\">\n\u003C\u002Fdiv>\n\n\u003C!-- Ping: пульсуючий badge -->\n\u003Cspan class=\"relative flex size-3\">\n    \u003Cspan class=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75\">\u003C\u002Fspan>\n    \u003Cspan class=\"relative inline-flex rounded-full size-3 bg-emerald-500\">\u003C\u002Fspan>\n\u003C\u002Fspan>\n\n\u003C!-- Pulse: skeleton loader -->\n\u003Cdiv class=\"animate-pulse flex space-x-4\">\n    \u003Cdiv class=\"rounded-full bg-slate-200 size-10\">\u003C\u002Fdiv>\n    \u003Cdiv class=\"flex-1 space-y-2 py-1\">\n        \u003Cdiv class=\"h-4 bg-slate-200 rounded w-3\u002F4\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"h-4 bg-slate-200 rounded w-1\u002F2\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- Bounce: scroll indicator -->\n\u003Cdiv class=\"animate-bounce flex items-center justify-center size-8 rounded-full bg-white shadow-md\">\n    ↓\n\u003C\u002Fdiv>\n",[3392,9981,9982,9987,10002,10010,10014,10019,10034,10053,10072,10080,10084,10089,10104,10123,10138,10157,10176,10184,10192,10196,10201,10216,10221],{"__ignoreMap":3438},[3599,9983,9984],{"class":3601,"line":3602},[3599,9985,9986],{"class":3605},"\u003C!-- Spinner: обертання -->\n",[3599,9988,9989,9991,9993,9995,9997,10000],{"class":3601,"line":3609},[3599,9990,3756],{"class":3755},[3599,9992,3820],{"class":3759},[3599,9994,3763],{"class":3623},[3599,9996,3766],{"class":3616},[3599,9998,9999],{"class":3769},"\"animate-spin size-6 border-2 border-indigo-600 border-t-transparent rounded-full\"",[3599,10001,3773],{"class":3755},[3599,10003,10004,10006,10008],{"class":3601,"line":3620},[3599,10005,4389],{"class":3755},[3599,10007,3820],{"class":3759},[3599,10009,3773],{"class":3755},[3599,10011,10012],{"class":3601,"line":3637},[3599,10013,3779],{"emptyLinePlaceholder":3778},[3599,10015,10016],{"class":3601,"line":3654},[3599,10017,10018],{"class":3605},"\u003C!-- Ping: пульсуючий badge -->\n",[3599,10020,10021,10023,10025,10027,10029,10032],{"class":3601,"line":3660},[3599,10022,3756],{"class":3755},[3599,10024,3599],{"class":3759},[3599,10026,3763],{"class":3623},[3599,10028,3766],{"class":3616},[3599,10030,10031],{"class":3769},"\"relative flex size-3\"",[3599,10033,3773],{"class":3755},[3599,10035,10036,10038,10040,10042,10044,10047,10049,10051],{"class":3601,"line":3666},[3599,10037,4363],{"class":3755},[3599,10039,3599],{"class":3759},[3599,10041,3763],{"class":3623},[3599,10043,3766],{"class":3616},[3599,10045,10046],{"class":3769},"\"animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75\"",[3599,10048,7122],{"class":3755},[3599,10050,3599],{"class":3759},[3599,10052,3773],{"class":3755},[3599,10054,10055,10057,10059,10061,10063,10066,10068,10070],{"class":3601,"line":3703},[3599,10056,4363],{"class":3755},[3599,10058,3599],{"class":3759},[3599,10060,3763],{"class":3623},[3599,10062,3766],{"class":3616},[3599,10064,10065],{"class":3769},"\"relative inline-flex rounded-full size-3 bg-emerald-500\"",[3599,10067,7122],{"class":3755},[3599,10069,3599],{"class":3759},[3599,10071,3773],{"class":3755},[3599,10073,10074,10076,10078],{"class":3601,"line":3717},[3599,10075,4389],{"class":3755},[3599,10077,3599],{"class":3759},[3599,10079,3773],{"class":3755},[3599,10081,10082],{"class":3601,"line":3832},[3599,10083,3779],{"emptyLinePlaceholder":3778},[3599,10085,10086],{"class":3601,"line":3838},[3599,10087,10088],{"class":3605},"\u003C!-- Pulse: skeleton loader -->\n",[3599,10090,10091,10093,10095,10097,10099,10102],{"class":3601,"line":3843},[3599,10092,3756],{"class":3755},[3599,10094,3820],{"class":3759},[3599,10096,3763],{"class":3623},[3599,10098,3766],{"class":3616},[3599,10100,10101],{"class":3769},"\"animate-pulse flex space-x-4\"",[3599,10103,3773],{"class":3755},[3599,10105,10106,10108,10110,10112,10114,10117,10119,10121],{"class":3601,"line":3849},[3599,10107,4363],{"class":3755},[3599,10109,3820],{"class":3759},[3599,10111,3763],{"class":3623},[3599,10113,3766],{"class":3616},[3599,10115,10116],{"class":3769},"\"rounded-full bg-slate-200 size-10\"",[3599,10118,7122],{"class":3755},[3599,10120,3820],{"class":3759},[3599,10122,3773],{"class":3755},[3599,10124,10125,10127,10129,10131,10133,10136],{"class":3601,"line":3865},[3599,10126,4363],{"class":3755},[3599,10128,3820],{"class":3759},[3599,10130,3763],{"class":3623},[3599,10132,3766],{"class":3616},[3599,10134,10135],{"class":3769},"\"flex-1 space-y-2 py-1\"",[3599,10137,3773],{"class":3755},[3599,10139,10140,10142,10144,10146,10148,10151,10153,10155],{"class":3601,"line":3870},[3599,10141,4372],{"class":3755},[3599,10143,3820],{"class":3759},[3599,10145,3763],{"class":3623},[3599,10147,3766],{"class":3616},[3599,10149,10150],{"class":3769},"\"h-4 bg-slate-200 rounded w-3\u002F4\"",[3599,10152,7122],{"class":3755},[3599,10154,3820],{"class":3759},[3599,10156,3773],{"class":3755},[3599,10158,10159,10161,10163,10165,10167,10170,10172,10174],{"class":3601,"line":3876},[3599,10160,4372],{"class":3755},[3599,10162,3820],{"class":3759},[3599,10164,3763],{"class":3623},[3599,10166,3766],{"class":3616},[3599,10168,10169],{"class":3769},"\"h-4 bg-slate-200 rounded w-1\u002F2\"",[3599,10171,7122],{"class":3755},[3599,10173,3820],{"class":3759},[3599,10175,3773],{"class":3755},[3599,10177,10178,10180,10182],{"class":3601,"line":3892},[3599,10179,4652],{"class":3755},[3599,10181,3820],{"class":3759},[3599,10183,3773],{"class":3755},[3599,10185,10186,10188,10190],{"class":3601,"line":3897},[3599,10187,4389],{"class":3755},[3599,10189,3820],{"class":3759},[3599,10191,3773],{"class":3755},[3599,10193,10194],{"class":3601,"line":3903},[3599,10195,3779],{"emptyLinePlaceholder":3778},[3599,10197,10198],{"class":3601,"line":3919},[3599,10199,10200],{"class":3605},"\u003C!-- Bounce: scroll indicator -->\n",[3599,10202,10203,10205,10207,10209,10211,10214],{"class":3601,"line":3924},[3599,10204,3756],{"class":3755},[3599,10206,3820],{"class":3759},[3599,10208,3763],{"class":3623},[3599,10210,3766],{"class":3616},[3599,10212,10213],{"class":3769},"\"animate-bounce flex items-center justify-center size-8 rounded-full bg-white shadow-md\"",[3599,10215,3773],{"class":3755},[3599,10217,10218],{"class":3601,"line":3930},[3599,10219,10220],{"class":3616},"    ↓\n",[3599,10222,10223,10225,10227],{"class":3601,"line":4516},[3599,10224,4389],{"class":3755},[3599,10226,3820],{"class":3759},[3599,10228,3773],{"class":3755},[3353,10230,10231],{},"Живий приклад всіх вбудованих анімацій:",[4319,10233,10234],{":tailwind":4321},[3430,10235,10237],{"className":3741,"code":10236,"language":3743,"meta":3438,"style":3438},"\u003Cdiv class=\"p-8 bg-slate-50 flex flex-wrap gap-8 items-start justify-center\"\n     style=\"font-family: system-ui, sans-serif;\">\n\n    \u003C!-- Spin -->\n    \u003Cdiv class=\"flex flex-col items-center gap-3\">\n        \u003Cdiv class=\"animate-spin size-10 border-4 border-indigo-200 border-t-indigo-600 rounded-full\">\u003C\u002Fdiv>\n        \u003Cp class=\"text-xs font-semibold text-slate-500\">animate-spin\u003C\u002Fp>\n        \u003Cp class=\"text-xs text-slate-400\">Лоадер\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Ping (notification badge) -->\n    \u003Cdiv class=\"flex flex-col items-center gap-3\">\n        \u003Cdiv class=\"relative\">\n            \u003Cdiv class=\"size-10 bg-slate-200 rounded-lg flex items-center justify-center text-sm\">🔔\u003C\u002Fdiv>\n            \u003Cspan class=\"absolute -top-1 -right-1 flex size-3\">\n                \u003Cspan class=\"animate-ping absolute inline-flex size-full rounded-full bg-rose-400 opacity-75\">\u003C\u002Fspan>\n                \u003Cspan class=\"relative inline-flex rounded-full size-3 bg-rose-500\">\u003C\u002Fspan>\n            \u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cp class=\"text-xs font-semibold text-slate-500\">animate-ping\u003C\u002Fp>\n        \u003Cp class=\"text-xs text-slate-400\">Badge\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Pulse (skeleton) -->\n    \u003Cdiv class=\"flex flex-col items-center gap-3\">\n        \u003Cdiv class=\"animate-pulse w-32 space-y-2\">\n            \u003Cdiv class=\"h-3 bg-slate-300 rounded-full w-3\u002F4\">\u003C\u002Fdiv>\n            \u003Cdiv class=\"h-3 bg-slate-300 rounded-full\">\u003C\u002Fdiv>\n            \u003Cdiv class=\"h-3 bg-slate-300 rounded-full w-5\u002F6\">\u003C\u002Fdiv>\n            \u003Cdiv class=\"h-3 bg-slate-200 rounded-full w-1\u002F2\">\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cp class=\"text-xs font-semibold text-slate-500\">animate-pulse\u003C\u002Fp>\n        \u003Cp class=\"text-xs text-slate-400\">Skeleton\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Bounce -->\n    \u003Cdiv class=\"flex flex-col items-center gap-3\">\n        \u003Cdiv class=\"animate-bounce size-10 bg-indigo-600 rounded-xl flex items-center justify-center text-white font-black\">↓\u003C\u002Fdiv>\n        \u003Cp class=\"text-xs font-semibold text-slate-500\">animate-bounce\u003C\u002Fp>\n        \u003Cp class=\"text-xs text-slate-400\">Scroll indicator\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Комбінація: пульсуюча аватарка онлайн -->\n    \u003Cdiv class=\"flex flex-col items-center gap-3\">\n        \u003Cdiv class=\"relative\">\n            \u003Cdiv class=\"size-10 bg-gradient-to-br from-violet-500 to-indigo-600 rounded-full flex items-center justify-center text-white font-bold text-sm\">AB\u003C\u002Fdiv>\n            \u003Cspan class=\"absolute bottom-0 right-0 flex size-3\">\n                \u003Cspan class=\"animate-ping absolute inline-flex size-full rounded-full bg-emerald-400 opacity-75\">\u003C\u002Fspan>\n                \u003Cspan class=\"relative inline-flex rounded-full size-3 bg-emerald-500 border-2 border-white\">\u003C\u002Fspan>\n            \u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cp class=\"text-xs font-semibold text-slate-500\">Комбо: ping\u003C\u002Fp>\n        \u003Cp class=\"text-xs text-slate-400\">Онлайн-статус\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n\u003C\u002Fdiv>\n",[3392,10238,10239,10252,10263,10267,10272,10287,10306,10329,10353,10361,10365,10370,10384,10399,10423,10438,10457,10476,10484,10492,10514,10537,10545,10549,10554,10568,10583,10602,10621,10640,10659,10667,10689,10712,10720,10724,10729,10743,10767,10789,10812,10820,10824,10829,10843,10857,10881,10896,10915,10934,10942,10950,10973,10996,11004,11008],{"__ignoreMap":3438},[3599,10240,10241,10243,10245,10247,10249],{"class":3601,"line":3602},[3599,10242,3756],{"class":3755},[3599,10244,3820],{"class":3759},[3599,10246,3763],{"class":3623},[3599,10248,3766],{"class":3616},[3599,10250,10251],{"class":3769},"\"p-8 bg-slate-50 flex flex-wrap gap-8 items-start justify-center\"\n",[3599,10253,10254,10257,10259,10261],{"class":3601,"line":3609},[3599,10255,10256],{"class":3623},"     style",[3599,10258,3766],{"class":3616},[3599,10260,4347],{"class":3769},[3599,10262,3773],{"class":3755},[3599,10264,10265],{"class":3601,"line":3620},[3599,10266,3779],{"emptyLinePlaceholder":3778},[3599,10268,10269],{"class":3601,"line":3637},[3599,10270,10271],{"class":3605},"    \u003C!-- Spin -->\n",[3599,10273,10274,10276,10278,10280,10282,10285],{"class":3601,"line":3654},[3599,10275,4363],{"class":3755},[3599,10277,3820],{"class":3759},[3599,10279,3763],{"class":3623},[3599,10281,3766],{"class":3616},[3599,10283,10284],{"class":3769},"\"flex flex-col items-center gap-3\"",[3599,10286,3773],{"class":3755},[3599,10288,10289,10291,10293,10295,10297,10300,10302,10304],{"class":3601,"line":3660},[3599,10290,4372],{"class":3755},[3599,10292,3820],{"class":3759},[3599,10294,3763],{"class":3623},[3599,10296,3766],{"class":3616},[3599,10298,10299],{"class":3769},"\"animate-spin size-10 border-4 border-indigo-200 border-t-indigo-600 rounded-full\"",[3599,10301,7122],{"class":3755},[3599,10303,3820],{"class":3759},[3599,10305,3773],{"class":3755},[3599,10307,10308,10310,10312,10314,10316,10319,10321,10323,10325,10327],{"class":3601,"line":3666},[3599,10309,4372],{"class":3755},[3599,10311,3353],{"class":3759},[3599,10313,3763],{"class":3623},[3599,10315,3766],{"class":3616},[3599,10317,10318],{"class":3769},"\"text-xs font-semibold text-slate-500\"",[3599,10320,4003],{"class":3755},[3599,10322,9918],{"class":3616},[3599,10324,4389],{"class":3755},[3599,10326,3353],{"class":3759},[3599,10328,3773],{"class":3755},[3599,10330,10331,10333,10335,10337,10339,10342,10344,10347,10349,10351],{"class":3601,"line":3703},[3599,10332,4372],{"class":3755},[3599,10334,3353],{"class":3759},[3599,10336,3763],{"class":3623},[3599,10338,3766],{"class":3616},[3599,10340,10341],{"class":3769},"\"text-xs text-slate-400\"",[3599,10343,4003],{"class":3755},[3599,10345,10346],{"class":3616},"Лоадер",[3599,10348,4389],{"class":3755},[3599,10350,3353],{"class":3759},[3599,10352,3773],{"class":3755},[3599,10354,10355,10357,10359],{"class":3601,"line":3717},[3599,10356,4652],{"class":3755},[3599,10358,3820],{"class":3759},[3599,10360,3773],{"class":3755},[3599,10362,10363],{"class":3601,"line":3832},[3599,10364,3779],{"emptyLinePlaceholder":3778},[3599,10366,10367],{"class":3601,"line":3838},[3599,10368,10369],{"class":3605},"    \u003C!-- Ping (notification badge) -->\n",[3599,10371,10372,10374,10376,10378,10380,10382],{"class":3601,"line":3843},[3599,10373,4363],{"class":3755},[3599,10375,3820],{"class":3759},[3599,10377,3763],{"class":3623},[3599,10379,3766],{"class":3616},[3599,10381,10284],{"class":3769},[3599,10383,3773],{"class":3755},[3599,10385,10386,10388,10390,10392,10394,10397],{"class":3601,"line":3849},[3599,10387,4372],{"class":3755},[3599,10389,3820],{"class":3759},[3599,10391,3763],{"class":3623},[3599,10393,3766],{"class":3616},[3599,10395,10396],{"class":3769},"\"relative\"",[3599,10398,3773],{"class":3755},[3599,10400,10401,10403,10405,10407,10409,10412,10414,10417,10419,10421],{"class":3601,"line":3865},[3599,10402,4422],{"class":3755},[3599,10404,3820],{"class":3759},[3599,10406,3763],{"class":3623},[3599,10408,3766],{"class":3616},[3599,10410,10411],{"class":3769},"\"size-10 bg-slate-200 rounded-lg flex items-center justify-center text-sm\"",[3599,10413,4003],{"class":3755},[3599,10415,10416],{"class":3616},"🔔",[3599,10418,4389],{"class":3755},[3599,10420,3820],{"class":3759},[3599,10422,3773],{"class":3755},[3599,10424,10425,10427,10429,10431,10433,10436],{"class":3601,"line":3870},[3599,10426,4422],{"class":3755},[3599,10428,3599],{"class":3759},[3599,10430,3763],{"class":3623},[3599,10432,3766],{"class":3616},[3599,10434,10435],{"class":3769},"\"absolute -top-1 -right-1 flex size-3\"",[3599,10437,3773],{"class":3755},[3599,10439,10440,10442,10444,10446,10448,10451,10453,10455],{"class":3601,"line":3876},[3599,10441,4761],{"class":3755},[3599,10443,3599],{"class":3759},[3599,10445,3763],{"class":3623},[3599,10447,3766],{"class":3616},[3599,10449,10450],{"class":3769},"\"animate-ping absolute inline-flex size-full rounded-full bg-rose-400 opacity-75\"",[3599,10452,7122],{"class":3755},[3599,10454,3599],{"class":3759},[3599,10456,3773],{"class":3755},[3599,10458,10459,10461,10463,10465,10467,10470,10472,10474],{"class":3601,"line":3892},[3599,10460,4761],{"class":3755},[3599,10462,3599],{"class":3759},[3599,10464,3763],{"class":3623},[3599,10466,3766],{"class":3616},[3599,10468,10469],{"class":3769},"\"relative inline-flex rounded-full size-3 bg-rose-500\"",[3599,10471,7122],{"class":3755},[3599,10473,3599],{"class":3759},[3599,10475,3773],{"class":3755},[3599,10477,10478,10480,10482],{"class":3601,"line":3897},[3599,10479,4458],{"class":3755},[3599,10481,3599],{"class":3759},[3599,10483,3773],{"class":3755},[3599,10485,10486,10488,10490],{"class":3601,"line":3903},[3599,10487,4642],{"class":3755},[3599,10489,3820],{"class":3759},[3599,10491,3773],{"class":3755},[3599,10493,10494,10496,10498,10500,10502,10504,10506,10508,10510,10512],{"class":3601,"line":3919},[3599,10495,4372],{"class":3755},[3599,10497,3353],{"class":3759},[3599,10499,3763],{"class":3623},[3599,10501,3766],{"class":3616},[3599,10503,10318],{"class":3769},[3599,10505,4003],{"class":3755},[3599,10507,9931],{"class":3616},[3599,10509,4389],{"class":3755},[3599,10511,3353],{"class":3759},[3599,10513,3773],{"class":3755},[3599,10515,10516,10518,10520,10522,10524,10526,10528,10531,10533,10535],{"class":3601,"line":3924},[3599,10517,4372],{"class":3755},[3599,10519,3353],{"class":3759},[3599,10521,3763],{"class":3623},[3599,10523,3766],{"class":3616},[3599,10525,10341],{"class":3769},[3599,10527,4003],{"class":3755},[3599,10529,10530],{"class":3616},"Badge",[3599,10532,4389],{"class":3755},[3599,10534,3353],{"class":3759},[3599,10536,3773],{"class":3755},[3599,10538,10539,10541,10543],{"class":3601,"line":3930},[3599,10540,4652],{"class":3755},[3599,10542,3820],{"class":3759},[3599,10544,3773],{"class":3755},[3599,10546,10547],{"class":3601,"line":4516},[3599,10548,3779],{"emptyLinePlaceholder":3778},[3599,10550,10551],{"class":3601,"line":4521},[3599,10552,10553],{"class":3605},"    \u003C!-- Pulse (skeleton) -->\n",[3599,10555,10556,10558,10560,10562,10564,10566],{"class":3601,"line":4527},[3599,10557,4363],{"class":3755},[3599,10559,3820],{"class":3759},[3599,10561,3763],{"class":3623},[3599,10563,3766],{"class":3616},[3599,10565,10284],{"class":3769},[3599,10567,3773],{"class":3755},[3599,10569,10570,10572,10574,10576,10578,10581],{"class":3601,"line":4541},[3599,10571,4372],{"class":3755},[3599,10573,3820],{"class":3759},[3599,10575,3763],{"class":3623},[3599,10577,3766],{"class":3616},[3599,10579,10580],{"class":3769},"\"animate-pulse w-32 space-y-2\"",[3599,10582,3773],{"class":3755},[3599,10584,10585,10587,10589,10591,10593,10596,10598,10600],{"class":3601,"line":4547},[3599,10586,4422],{"class":3755},[3599,10588,3820],{"class":3759},[3599,10590,3763],{"class":3623},[3599,10592,3766],{"class":3616},[3599,10594,10595],{"class":3769},"\"h-3 bg-slate-300 rounded-full w-3\u002F4\"",[3599,10597,7122],{"class":3755},[3599,10599,3820],{"class":3759},[3599,10601,3773],{"class":3755},[3599,10603,10604,10606,10608,10610,10612,10615,10617,10619],{"class":3601,"line":4553},[3599,10605,4422],{"class":3755},[3599,10607,3820],{"class":3759},[3599,10609,3763],{"class":3623},[3599,10611,3766],{"class":3616},[3599,10613,10614],{"class":3769},"\"h-3 bg-slate-300 rounded-full\"",[3599,10616,7122],{"class":3755},[3599,10618,3820],{"class":3759},[3599,10620,3773],{"class":3755},[3599,10622,10623,10625,10627,10629,10631,10634,10636,10638],{"class":3601,"line":4561},[3599,10624,4422],{"class":3755},[3599,10626,3820],{"class":3759},[3599,10628,3763],{"class":3623},[3599,10630,3766],{"class":3616},[3599,10632,10633],{"class":3769},"\"h-3 bg-slate-300 rounded-full w-5\u002F6\"",[3599,10635,7122],{"class":3755},[3599,10637,3820],{"class":3759},[3599,10639,3773],{"class":3755},[3599,10641,10642,10644,10646,10648,10650,10653,10655,10657],{"class":3601,"line":4567},[3599,10643,4422],{"class":3755},[3599,10645,3820],{"class":3759},[3599,10647,3763],{"class":3623},[3599,10649,3766],{"class":3616},[3599,10651,10652],{"class":3769},"\"h-3 bg-slate-200 rounded-full w-1\u002F2\"",[3599,10654,7122],{"class":3755},[3599,10656,3820],{"class":3759},[3599,10658,3773],{"class":3755},[3599,10660,10661,10663,10665],{"class":3601,"line":4576},[3599,10662,4642],{"class":3755},[3599,10664,3820],{"class":3759},[3599,10666,3773],{"class":3755},[3599,10668,10669,10671,10673,10675,10677,10679,10681,10683,10685,10687],{"class":3601,"line":4581},[3599,10670,4372],{"class":3755},[3599,10672,3353],{"class":3759},[3599,10674,3763],{"class":3623},[3599,10676,3766],{"class":3616},[3599,10678,10318],{"class":3769},[3599,10680,4003],{"class":3755},[3599,10682,9944],{"class":3616},[3599,10684,4389],{"class":3755},[3599,10686,3353],{"class":3759},[3599,10688,3773],{"class":3755},[3599,10690,10691,10693,10695,10697,10699,10701,10703,10706,10708,10710],{"class":3601,"line":4587},[3599,10692,4372],{"class":3755},[3599,10694,3353],{"class":3759},[3599,10696,3763],{"class":3623},[3599,10698,3766],{"class":3616},[3599,10700,10341],{"class":3769},[3599,10702,4003],{"class":3755},[3599,10704,10705],{"class":3616},"Skeleton",[3599,10707,4389],{"class":3755},[3599,10709,3353],{"class":3759},[3599,10711,3773],{"class":3755},[3599,10713,10714,10716,10718],{"class":3601,"line":4601},[3599,10715,4652],{"class":3755},[3599,10717,3820],{"class":3759},[3599,10719,3773],{"class":3755},[3599,10721,10722],{"class":3601,"line":4606},[3599,10723,3779],{"emptyLinePlaceholder":3778},[3599,10725,10726],{"class":3601,"line":4612},[3599,10727,10728],{"class":3605},"    \u003C!-- Bounce -->\n",[3599,10730,10731,10733,10735,10737,10739,10741],{"class":3601,"line":4619},[3599,10732,4363],{"class":3755},[3599,10734,3820],{"class":3759},[3599,10736,3763],{"class":3623},[3599,10738,3766],{"class":3616},[3599,10740,10284],{"class":3769},[3599,10742,3773],{"class":3755},[3599,10744,10745,10747,10749,10751,10753,10756,10758,10761,10763,10765],{"class":3601,"line":4625},[3599,10746,4372],{"class":3755},[3599,10748,3820],{"class":3759},[3599,10750,3763],{"class":3623},[3599,10752,3766],{"class":3616},[3599,10754,10755],{"class":3769},"\"animate-bounce size-10 bg-indigo-600 rounded-xl flex items-center justify-center text-white font-black\"",[3599,10757,4003],{"class":3755},[3599,10759,10760],{"class":3616},"↓",[3599,10762,4389],{"class":3755},[3599,10764,3820],{"class":3759},[3599,10766,3773],{"class":3755},[3599,10768,10769,10771,10773,10775,10777,10779,10781,10783,10785,10787],{"class":3601,"line":4634},[3599,10770,4372],{"class":3755},[3599,10772,3353],{"class":3759},[3599,10774,3763],{"class":3623},[3599,10776,3766],{"class":3616},[3599,10778,10318],{"class":3769},[3599,10780,4003],{"class":3755},[3599,10782,9957],{"class":3616},[3599,10784,4389],{"class":3755},[3599,10786,3353],{"class":3759},[3599,10788,3773],{"class":3755},[3599,10790,10791,10793,10795,10797,10799,10801,10803,10806,10808,10810],{"class":3601,"line":4639},[3599,10792,4372],{"class":3755},[3599,10794,3353],{"class":3759},[3599,10796,3763],{"class":3623},[3599,10798,3766],{"class":3616},[3599,10800,10341],{"class":3769},[3599,10802,4003],{"class":3755},[3599,10804,10805],{"class":3616},"Scroll indicator",[3599,10807,4389],{"class":3755},[3599,10809,3353],{"class":3759},[3599,10811,3773],{"class":3755},[3599,10813,10814,10816,10818],{"class":3601,"line":4649},[3599,10815,4652],{"class":3755},[3599,10817,3820],{"class":3759},[3599,10819,3773],{"class":3755},[3599,10821,10822],{"class":3601,"line":4659},[3599,10823,3779],{"emptyLinePlaceholder":3778},[3599,10825,10826],{"class":3601,"line":4664},[3599,10827,10828],{"class":3605},"    \u003C!-- Комбінація: пульсуюча аватарка онлайн -->\n",[3599,10830,10831,10833,10835,10837,10839,10841],{"class":3601,"line":4670},[3599,10832,4363],{"class":3755},[3599,10834,3820],{"class":3759},[3599,10836,3763],{"class":3623},[3599,10838,3766],{"class":3616},[3599,10840,10284],{"class":3769},[3599,10842,3773],{"class":3755},[3599,10844,10845,10847,10849,10851,10853,10855],{"class":3601,"line":4679},[3599,10846,4372],{"class":3755},[3599,10848,3820],{"class":3759},[3599,10850,3763],{"class":3623},[3599,10852,3766],{"class":3616},[3599,10854,10396],{"class":3769},[3599,10856,3773],{"class":3755},[3599,10858,10859,10861,10863,10865,10867,10870,10872,10875,10877,10879],{"class":3601,"line":4703},[3599,10860,4422],{"class":3755},[3599,10862,3820],{"class":3759},[3599,10864,3763],{"class":3623},[3599,10866,3766],{"class":3616},[3599,10868,10869],{"class":3769},"\"size-10 bg-gradient-to-br from-violet-500 to-indigo-600 rounded-full flex items-center justify-center text-white font-bold text-sm\"",[3599,10871,4003],{"class":3755},[3599,10873,10874],{"class":3616},"AB",[3599,10876,4389],{"class":3755},[3599,10878,3820],{"class":3759},[3599,10880,3773],{"class":3755},[3599,10882,10883,10885,10887,10889,10891,10894],{"class":3601,"line":4719},[3599,10884,4422],{"class":3755},[3599,10886,3599],{"class":3759},[3599,10888,3763],{"class":3623},[3599,10890,3766],{"class":3616},[3599,10892,10893],{"class":3769},"\"absolute bottom-0 right-0 flex size-3\"",[3599,10895,3773],{"class":3755},[3599,10897,10898,10900,10902,10904,10906,10909,10911,10913],{"class":3601,"line":4724},[3599,10899,4761],{"class":3755},[3599,10901,3599],{"class":3759},[3599,10903,3763],{"class":3623},[3599,10905,3766],{"class":3616},[3599,10907,10908],{"class":3769},"\"animate-ping absolute inline-flex size-full rounded-full bg-emerald-400 opacity-75\"",[3599,10910,7122],{"class":3755},[3599,10912,3599],{"class":3759},[3599,10914,3773],{"class":3755},[3599,10916,10917,10919,10921,10923,10925,10928,10930,10932],{"class":3601,"line":4738},[3599,10918,4761],{"class":3755},[3599,10920,3599],{"class":3759},[3599,10922,3763],{"class":3623},[3599,10924,3766],{"class":3616},[3599,10926,10927],{"class":3769},"\"relative inline-flex rounded-full size-3 bg-emerald-500 border-2 border-white\"",[3599,10929,7122],{"class":3755},[3599,10931,3599],{"class":3759},[3599,10933,3773],{"class":3755},[3599,10935,10936,10938,10940],{"class":3601,"line":4744},[3599,10937,4458],{"class":3755},[3599,10939,3599],{"class":3759},[3599,10941,3773],{"class":3755},[3599,10943,10944,10946,10948],{"class":3601,"line":4750},[3599,10945,4642],{"class":3755},[3599,10947,3820],{"class":3759},[3599,10949,3773],{"class":3755},[3599,10951,10952,10954,10956,10958,10960,10962,10964,10967,10969,10971],{"class":3601,"line":4758},[3599,10953,4372],{"class":3755},[3599,10955,3353],{"class":3759},[3599,10957,3763],{"class":3623},[3599,10959,3766],{"class":3616},[3599,10961,10318],{"class":3769},[3599,10963,4003],{"class":3755},[3599,10965,10966],{"class":3616},"Комбо: ping",[3599,10968,4389],{"class":3755},[3599,10970,3353],{"class":3759},[3599,10972,3773],{"class":3755},[3599,10974,10975,10977,10979,10981,10983,10985,10987,10990,10992,10994],{"class":3601,"line":4773},[3599,10976,4372],{"class":3755},[3599,10978,3353],{"class":3759},[3599,10980,3763],{"class":3623},[3599,10982,3766],{"class":3616},[3599,10984,10341],{"class":3769},[3599,10986,4003],{"class":3755},[3599,10988,10989],{"class":3616},"Онлайн-статус",[3599,10991,4389],{"class":3755},[3599,10993,3353],{"class":3759},[3599,10995,3773],{"class":3755},[3599,10997,10998,11000,11002],{"class":3601,"line":4781},[3599,10999,4652],{"class":3755},[3599,11001,3820],{"class":3759},[3599,11003,3773],{"class":3755},[3599,11005,11006],{"class":3601,"line":4787},[3599,11007,3779],{"emptyLinePlaceholder":3778},[3599,11009,11010,11012,11014],{"class":3601,"line":4797},[3599,11011,4389],{"class":3755},[3599,11013,3820],{"class":3759},[3599,11015,3773],{"class":3755},[3409,11017],{},[3416,11019,11021],{"id":11020},"_32-управління-анімацією-duration-delay-iteration-direction","3.2. Управління анімацією: duration, delay, iteration, direction",[3353,11023,11024],{},"Анімації можна налаштовувати так само, як переходи:",[3430,11026,11028],{"className":3741,"code":11027,"language":3743,"meta":3438,"style":3438},"\u003C!-- Тривалість (за замовчуванням: 1s для більшості) -->\n\u003Cdiv class=\"animate-spin duration-[2000ms]\">  \u003C!-- повільний спін -->\n\u003Cdiv class=\"animate-spin duration-500\">        \u003C!-- швидкий спін -->\n\n\u003C!-- Затримка перед стартом -->\n\u003Cdiv class=\"animate-bounce delay-150\">\n\u003Cdiv class=\"animate-bounce delay-300\">\n\u003Cdiv class=\"animate-bounce delay-500\">\n\u003C!-- Ефект: три крапки bouncing з зміщенням (typing indicator) -->\n\n\u003C!-- Пауза\u002Fзупинка анімації -->\n\u003Cdiv class=\"animate-spin [animation-play-state:paused] hover:[animation-play-state:running]\">\n    \u003C!-- Запуск анімації тільки при hover -->\n\u003C\u002Fdiv>\n\n\u003C!-- Одноразова (forwards зберігає фінальний стан) -->\n\u003Cdiv class=\"animate-[fade-in_0.5s_ease-out_forwards]\">\n\n\u003C!-- Зворотна анімація -->\n\u003Cdiv class=\"[animation-direction:reverse] animate-bounce\">\n\n\u003C!-- Кількість повторень -->\n\u003Cdiv class=\"[animation-iteration-count:3] animate-bounce\">  \u003C!-- 3 рази -->\n\u003Cdiv class=\"[animation-iteration-count:infinite] animate-bounce\"> \u003C!-- нескінченно -->\n",[3392,11029,11030,11035,11053,11071,11075,11080,11095,11110,11125,11130,11134,11139,11154,11159,11167,11171,11176,11191,11195,11200,11215,11219,11224,11242],{"__ignoreMap":3438},[3599,11031,11032],{"class":3601,"line":3602},[3599,11033,11034],{"class":3605},"\u003C!-- Тривалість (за замовчуванням: 1s для більшості) -->\n",[3599,11036,11037,11039,11041,11043,11045,11048,11050],{"class":3601,"line":3609},[3599,11038,3756],{"class":3755},[3599,11040,3820],{"class":3759},[3599,11042,3763],{"class":3623},[3599,11044,3766],{"class":3616},[3599,11046,11047],{"class":3769},"\"animate-spin duration-[2000ms]\"",[3599,11049,4003],{"class":3755},[3599,11051,11052],{"class":3605},"  \u003C!-- повільний спін -->\n",[3599,11054,11055,11057,11059,11061,11063,11066,11068],{"class":3601,"line":3620},[3599,11056,3756],{"class":3755},[3599,11058,3820],{"class":3759},[3599,11060,3763],{"class":3623},[3599,11062,3766],{"class":3616},[3599,11064,11065],{"class":3769},"\"animate-spin duration-500\"",[3599,11067,4003],{"class":3755},[3599,11069,11070],{"class":3605},"        \u003C!-- швидкий спін -->\n",[3599,11072,11073],{"class":3601,"line":3637},[3599,11074,3779],{"emptyLinePlaceholder":3778},[3599,11076,11077],{"class":3601,"line":3654},[3599,11078,11079],{"class":3605},"\u003C!-- Затримка перед стартом -->\n",[3599,11081,11082,11084,11086,11088,11090,11093],{"class":3601,"line":3660},[3599,11083,3756],{"class":3755},[3599,11085,3820],{"class":3759},[3599,11087,3763],{"class":3623},[3599,11089,3766],{"class":3616},[3599,11091,11092],{"class":3769},"\"animate-bounce delay-150\"",[3599,11094,3773],{"class":3755},[3599,11096,11097,11099,11101,11103,11105,11108],{"class":3601,"line":3666},[3599,11098,3756],{"class":3755},[3599,11100,3820],{"class":3759},[3599,11102,3763],{"class":3623},[3599,11104,3766],{"class":3616},[3599,11106,11107],{"class":3769},"\"animate-bounce delay-300\"",[3599,11109,3773],{"class":3755},[3599,11111,11112,11114,11116,11118,11120,11123],{"class":3601,"line":3703},[3599,11113,3756],{"class":3755},[3599,11115,3820],{"class":3759},[3599,11117,3763],{"class":3623},[3599,11119,3766],{"class":3616},[3599,11121,11122],{"class":3769},"\"animate-bounce delay-500\"",[3599,11124,3773],{"class":3755},[3599,11126,11127],{"class":3601,"line":3717},[3599,11128,11129],{"class":3605},"\u003C!-- Ефект: три крапки bouncing з зміщенням (typing indicator) -->\n",[3599,11131,11132],{"class":3601,"line":3832},[3599,11133,3779],{"emptyLinePlaceholder":3778},[3599,11135,11136],{"class":3601,"line":3838},[3599,11137,11138],{"class":3605},"\u003C!-- Пауза\u002Fзупинка анімації -->\n",[3599,11140,11141,11143,11145,11147,11149,11152],{"class":3601,"line":3843},[3599,11142,3756],{"class":3755},[3599,11144,3820],{"class":3759},[3599,11146,3763],{"class":3623},[3599,11148,3766],{"class":3616},[3599,11150,11151],{"class":3769},"\"animate-spin [animation-play-state:paused] hover:[animation-play-state:running]\"",[3599,11153,3773],{"class":3755},[3599,11155,11156],{"class":3601,"line":3849},[3599,11157,11158],{"class":3605},"    \u003C!-- Запуск анімації тільки при hover -->\n",[3599,11160,11161,11163,11165],{"class":3601,"line":3865},[3599,11162,4389],{"class":3755},[3599,11164,3820],{"class":3759},[3599,11166,3773],{"class":3755},[3599,11168,11169],{"class":3601,"line":3870},[3599,11170,3779],{"emptyLinePlaceholder":3778},[3599,11172,11173],{"class":3601,"line":3876},[3599,11174,11175],{"class":3605},"\u003C!-- Одноразова (forwards зберігає фінальний стан) -->\n",[3599,11177,11178,11180,11182,11184,11186,11189],{"class":3601,"line":3892},[3599,11179,3756],{"class":3755},[3599,11181,3820],{"class":3759},[3599,11183,3763],{"class":3623},[3599,11185,3766],{"class":3616},[3599,11187,11188],{"class":3769},"\"animate-[fade-in_0.5s_ease-out_forwards]\"",[3599,11190,3773],{"class":3755},[3599,11192,11193],{"class":3601,"line":3897},[3599,11194,3779],{"emptyLinePlaceholder":3778},[3599,11196,11197],{"class":3601,"line":3903},[3599,11198,11199],{"class":3605},"\u003C!-- Зворотна анімація -->\n",[3599,11201,11202,11204,11206,11208,11210,11213],{"class":3601,"line":3919},[3599,11203,3756],{"class":3755},[3599,11205,3820],{"class":3759},[3599,11207,3763],{"class":3623},[3599,11209,3766],{"class":3616},[3599,11211,11212],{"class":3769},"\"[animation-direction:reverse] animate-bounce\"",[3599,11214,3773],{"class":3755},[3599,11216,11217],{"class":3601,"line":3924},[3599,11218,3779],{"emptyLinePlaceholder":3778},[3599,11220,11221],{"class":3601,"line":3930},[3599,11222,11223],{"class":3605},"\u003C!-- Кількість повторень -->\n",[3599,11225,11226,11228,11230,11232,11234,11237,11239],{"class":3601,"line":4516},[3599,11227,3756],{"class":3755},[3599,11229,3820],{"class":3759},[3599,11231,3763],{"class":3623},[3599,11233,3766],{"class":3616},[3599,11235,11236],{"class":3769},"\"[animation-iteration-count:3] animate-bounce\"",[3599,11238,4003],{"class":3755},[3599,11240,11241],{"class":3605},"  \u003C!-- 3 рази -->\n",[3599,11243,11244,11246,11248,11250,11252,11255,11257],{"class":3601,"line":4521},[3599,11245,3756],{"class":3755},[3599,11247,3820],{"class":3759},[3599,11249,3763],{"class":3623},[3599,11251,3766],{"class":3616},[3599,11253,11254],{"class":3769},"\"[animation-iteration-count:infinite] animate-bounce\"",[3599,11256,4003],{"class":3755},[3599,11258,11259],{"class":3605}," \u003C!-- нескінченно -->\n",[3353,11261,11262],{},"Typing indicator (три bouncing крапки з delay):",[4319,11264,11265],{":tailwind":4321},[3430,11266,11268],{"className":3741,"code":11267,"language":3743,"meta":3438,"style":3438},"\u003Cdiv class=\"p-8 bg-slate-100 flex items-center justify-center gap-6\"\n     style=\"font-family: system-ui, sans-serif;\">\n\n    \u003C!-- Typing indicator -->\n    \u003Cdiv class=\"bg-white rounded-2xl rounded-bl-sm px-4 py-3 shadow-sm flex items-center gap-1.5\">\n        \u003Cdiv class=\"size-2 rounded-full bg-slate-400 animate-bounce [animation-delay:0ms]\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"size-2 rounded-full bg-slate-400 animate-bounce [animation-delay:150ms]\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"size-2 rounded-full bg-slate-400 animate-bounce [animation-delay:300ms]\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Progress dots -->\n    \u003Cdiv class=\"flex gap-2\">\n        \u003Cdiv class=\"size-2.5 rounded-full bg-indigo-600 animate-bounce [animation-delay:0ms]\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"size-2.5 rounded-full bg-indigo-600 animate-bounce [animation-delay:100ms]\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"size-2.5 rounded-full bg-indigo-600 animate-bounce [animation-delay:200ms]\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"size-2.5 rounded-full bg-indigo-600 animate-bounce [animation-delay:300ms]\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Pulse ring (notification) -->\n    \u003Cdiv class=\"relative flex items-center justify-center\">\n        \u003Cdiv class=\"animate-ping absolute size-12 rounded-full bg-indigo-400 opacity-30\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"animate-ping absolute size-8 rounded-full bg-indigo-400 opacity-40 [animation-delay:200ms]\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"relative size-6 rounded-full bg-indigo-600 flex items-center justify-center\">\n            \u003Cspan class=\"text-white text-xs font-bold\">!\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n\u003C\u002Fdiv>\n",[3392,11269,11270,11283,11293,11297,11302,11317,11336,11355,11374,11382,11386,11391,11406,11425,11444,11463,11482,11490,11494,11499,11514,11533,11552,11567,11591,11599,11607,11611],{"__ignoreMap":3438},[3599,11271,11272,11274,11276,11278,11280],{"class":3601,"line":3602},[3599,11273,3756],{"class":3755},[3599,11275,3820],{"class":3759},[3599,11277,3763],{"class":3623},[3599,11279,3766],{"class":3616},[3599,11281,11282],{"class":3769},"\"p-8 bg-slate-100 flex items-center justify-center gap-6\"\n",[3599,11284,11285,11287,11289,11291],{"class":3601,"line":3609},[3599,11286,10256],{"class":3623},[3599,11288,3766],{"class":3616},[3599,11290,4347],{"class":3769},[3599,11292,3773],{"class":3755},[3599,11294,11295],{"class":3601,"line":3620},[3599,11296,3779],{"emptyLinePlaceholder":3778},[3599,11298,11299],{"class":3601,"line":3637},[3599,11300,11301],{"class":3605},"    \u003C!-- Typing indicator -->\n",[3599,11303,11304,11306,11308,11310,11312,11315],{"class":3601,"line":3654},[3599,11305,4363],{"class":3755},[3599,11307,3820],{"class":3759},[3599,11309,3763],{"class":3623},[3599,11311,3766],{"class":3616},[3599,11313,11314],{"class":3769},"\"bg-white rounded-2xl rounded-bl-sm px-4 py-3 shadow-sm flex items-center gap-1.5\"",[3599,11316,3773],{"class":3755},[3599,11318,11319,11321,11323,11325,11327,11330,11332,11334],{"class":3601,"line":3660},[3599,11320,4372],{"class":3755},[3599,11322,3820],{"class":3759},[3599,11324,3763],{"class":3623},[3599,11326,3766],{"class":3616},[3599,11328,11329],{"class":3769},"\"size-2 rounded-full bg-slate-400 animate-bounce [animation-delay:0ms]\"",[3599,11331,7122],{"class":3755},[3599,11333,3820],{"class":3759},[3599,11335,3773],{"class":3755},[3599,11337,11338,11340,11342,11344,11346,11349,11351,11353],{"class":3601,"line":3666},[3599,11339,4372],{"class":3755},[3599,11341,3820],{"class":3759},[3599,11343,3763],{"class":3623},[3599,11345,3766],{"class":3616},[3599,11347,11348],{"class":3769},"\"size-2 rounded-full bg-slate-400 animate-bounce [animation-delay:150ms]\"",[3599,11350,7122],{"class":3755},[3599,11352,3820],{"class":3759},[3599,11354,3773],{"class":3755},[3599,11356,11357,11359,11361,11363,11365,11368,11370,11372],{"class":3601,"line":3703},[3599,11358,4372],{"class":3755},[3599,11360,3820],{"class":3759},[3599,11362,3763],{"class":3623},[3599,11364,3766],{"class":3616},[3599,11366,11367],{"class":3769},"\"size-2 rounded-full bg-slate-400 animate-bounce [animation-delay:300ms]\"",[3599,11369,7122],{"class":3755},[3599,11371,3820],{"class":3759},[3599,11373,3773],{"class":3755},[3599,11375,11376,11378,11380],{"class":3601,"line":3717},[3599,11377,4652],{"class":3755},[3599,11379,3820],{"class":3759},[3599,11381,3773],{"class":3755},[3599,11383,11384],{"class":3601,"line":3832},[3599,11385,3779],{"emptyLinePlaceholder":3778},[3599,11387,11388],{"class":3601,"line":3838},[3599,11389,11390],{"class":3605},"    \u003C!-- Progress dots -->\n",[3599,11392,11393,11395,11397,11399,11401,11404],{"class":3601,"line":3843},[3599,11394,4363],{"class":3755},[3599,11396,3820],{"class":3759},[3599,11398,3763],{"class":3623},[3599,11400,3766],{"class":3616},[3599,11402,11403],{"class":3769},"\"flex gap-2\"",[3599,11405,3773],{"class":3755},[3599,11407,11408,11410,11412,11414,11416,11419,11421,11423],{"class":3601,"line":3849},[3599,11409,4372],{"class":3755},[3599,11411,3820],{"class":3759},[3599,11413,3763],{"class":3623},[3599,11415,3766],{"class":3616},[3599,11417,11418],{"class":3769},"\"size-2.5 rounded-full bg-indigo-600 animate-bounce [animation-delay:0ms]\"",[3599,11420,7122],{"class":3755},[3599,11422,3820],{"class":3759},[3599,11424,3773],{"class":3755},[3599,11426,11427,11429,11431,11433,11435,11438,11440,11442],{"class":3601,"line":3865},[3599,11428,4372],{"class":3755},[3599,11430,3820],{"class":3759},[3599,11432,3763],{"class":3623},[3599,11434,3766],{"class":3616},[3599,11436,11437],{"class":3769},"\"size-2.5 rounded-full bg-indigo-600 animate-bounce [animation-delay:100ms]\"",[3599,11439,7122],{"class":3755},[3599,11441,3820],{"class":3759},[3599,11443,3773],{"class":3755},[3599,11445,11446,11448,11450,11452,11454,11457,11459,11461],{"class":3601,"line":3870},[3599,11447,4372],{"class":3755},[3599,11449,3820],{"class":3759},[3599,11451,3763],{"class":3623},[3599,11453,3766],{"class":3616},[3599,11455,11456],{"class":3769},"\"size-2.5 rounded-full bg-indigo-600 animate-bounce [animation-delay:200ms]\"",[3599,11458,7122],{"class":3755},[3599,11460,3820],{"class":3759},[3599,11462,3773],{"class":3755},[3599,11464,11465,11467,11469,11471,11473,11476,11478,11480],{"class":3601,"line":3876},[3599,11466,4372],{"class":3755},[3599,11468,3820],{"class":3759},[3599,11470,3763],{"class":3623},[3599,11472,3766],{"class":3616},[3599,11474,11475],{"class":3769},"\"size-2.5 rounded-full bg-indigo-600 animate-bounce [animation-delay:300ms]\"",[3599,11477,7122],{"class":3755},[3599,11479,3820],{"class":3759},[3599,11481,3773],{"class":3755},[3599,11483,11484,11486,11488],{"class":3601,"line":3892},[3599,11485,4652],{"class":3755},[3599,11487,3820],{"class":3759},[3599,11489,3773],{"class":3755},[3599,11491,11492],{"class":3601,"line":3897},[3599,11493,3779],{"emptyLinePlaceholder":3778},[3599,11495,11496],{"class":3601,"line":3903},[3599,11497,11498],{"class":3605},"    \u003C!-- Pulse ring (notification) -->\n",[3599,11500,11501,11503,11505,11507,11509,11512],{"class":3601,"line":3919},[3599,11502,4363],{"class":3755},[3599,11504,3820],{"class":3759},[3599,11506,3763],{"class":3623},[3599,11508,3766],{"class":3616},[3599,11510,11511],{"class":3769},"\"relative flex items-center justify-center\"",[3599,11513,3773],{"class":3755},[3599,11515,11516,11518,11520,11522,11524,11527,11529,11531],{"class":3601,"line":3924},[3599,11517,4372],{"class":3755},[3599,11519,3820],{"class":3759},[3599,11521,3763],{"class":3623},[3599,11523,3766],{"class":3616},[3599,11525,11526],{"class":3769},"\"animate-ping absolute size-12 rounded-full bg-indigo-400 opacity-30\"",[3599,11528,7122],{"class":3755},[3599,11530,3820],{"class":3759},[3599,11532,3773],{"class":3755},[3599,11534,11535,11537,11539,11541,11543,11546,11548,11550],{"class":3601,"line":3930},[3599,11536,4372],{"class":3755},[3599,11538,3820],{"class":3759},[3599,11540,3763],{"class":3623},[3599,11542,3766],{"class":3616},[3599,11544,11545],{"class":3769},"\"animate-ping absolute size-8 rounded-full bg-indigo-400 opacity-40 [animation-delay:200ms]\"",[3599,11547,7122],{"class":3755},[3599,11549,3820],{"class":3759},[3599,11551,3773],{"class":3755},[3599,11553,11554,11556,11558,11560,11562,11565],{"class":3601,"line":4516},[3599,11555,4372],{"class":3755},[3599,11557,3820],{"class":3759},[3599,11559,3763],{"class":3623},[3599,11561,3766],{"class":3616},[3599,11563,11564],{"class":3769},"\"relative size-6 rounded-full bg-indigo-600 flex items-center justify-center\"",[3599,11566,3773],{"class":3755},[3599,11568,11569,11571,11573,11575,11577,11580,11582,11585,11587,11589],{"class":3601,"line":4521},[3599,11570,4422],{"class":3755},[3599,11572,3599],{"class":3759},[3599,11574,3763],{"class":3623},[3599,11576,3766],{"class":3616},[3599,11578,11579],{"class":3769},"\"text-white text-xs font-bold\"",[3599,11581,4003],{"class":3755},[3599,11583,11584],{"class":3616},"!",[3599,11586,4389],{"class":3755},[3599,11588,3599],{"class":3759},[3599,11590,3773],{"class":3755},[3599,11592,11593,11595,11597],{"class":3601,"line":4527},[3599,11594,4642],{"class":3755},[3599,11596,3820],{"class":3759},[3599,11598,3773],{"class":3755},[3599,11600,11601,11603,11605],{"class":3601,"line":4541},[3599,11602,4652],{"class":3755},[3599,11604,3820],{"class":3759},[3599,11606,3773],{"class":3755},[3599,11608,11609],{"class":3601,"line":4547},[3599,11610,3779],{"emptyLinePlaceholder":3778},[3599,11612,11613,11615,11617],{"class":3601,"line":4553},[3599,11614,4389],{"class":3755},[3599,11616,3820],{"class":3759},[3599,11618,3773],{"class":3755},[3409,11620],{},[3416,11622,11624,11625,11628],{"id":11623},"_33-кастомні-keyframes-у-tailwind-v4","3.3. Кастомні ",[3392,11626,11627],{},"@keyframes"," у Tailwind v4",[3353,11630,11631],{},"У Tailwind v4 кастомні keyframe-анімації визначаються прямо у CSS-файлі — без конфігурації JavaScript:",[3430,11633,11636],{"className":3593,"code":11634,"filename":11635,"language":3595,"meta":3438,"style":3438},"@import 'tailwindcss';\n\n\u002F* === Визначення keyframes === *\u002F\n\n@keyframes fade-in {\n    from { opacity: 0; }\n    to   { opacity: 1; }\n}\n\n@keyframes fade-in-up {\n    from {\n        opacity: 0;\n        transform: translateY(16px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n@keyframes fade-in-down {\n    from {\n        opacity: 0;\n        transform: translateY(-16px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n@keyframes scale-in {\n    from {\n        opacity: 0;\n        transform: scale(0.92);\n    }\n    to {\n        opacity: 1;\n        transform: scale(1);\n    }\n}\n\n@keyframes slide-in-right {\n    from { transform: translateX(100%); }\n    to   { transform: translateX(0); }\n}\n\n@keyframes slide-out-right {\n    from { transform: translateX(0); }\n    to   { transform: translateX(100%); }\n}\n\n@keyframes shake {\n    0%, 100% { transform: translateX(0); }\n    10%, 50%, 90% { transform: translateX(-6px); }\n    30%, 70% { transform: translateX(6px); }\n}\n\n@keyframes pop {\n    0%   { transform: scale(1); }\n    50%  { transform: scale(1.18); }\n    100% { transform: scale(1); }\n}\n\n\u002F* === Реєстрація у @theme для використання через animate-* === *\u002F\n\n@theme {\n    --animate-fade-in:        fade-in 0.4s ease-out;\n    --animate-fade-in-up:     fade-in-up 0.5s ease-out;\n    --animate-fade-in-down:   fade-in-down 0.5s ease-out;\n    --animate-scale-in:       scale-in 0.3s ease-out;\n    --animate-slide-in-right: slide-in-right 0.35s ease-out;\n    --animate-slide-out-right:slide-out-right 0.35s ease-in forwards;\n    --animate-shake:          shake 0.5s ease-in-out;\n    --animate-pop:            pop 0.25s ease-in-out;\n}\n","src\u002Fstyles\u002Fmain.css",[3392,11637,11638,11648,11652,11657,11661,11670,11684,11697,11701,11705,11714,11719,11730,11747,11752,11757,11767,11781,11785,11789,11793,11802,11806,11816,11831,11835,11839,11849,11863,11867,11871,11875,11884,11888,11898,11913,11917,11921,11931,11945,11949,11953,11957,11966,11985,12001,12005,12009,12018,12034,12050,12054,12058,12067,12084,12102,12120,12124,12128,12137,12154,12172,12189,12193,12197,12202,12206,12213,12232,12249,12265,12282,12299,12317,12329,12341],{"__ignoreMap":3438},[3599,11639,11640,11643,11646],{"class":3601,"line":3602},[3599,11641,11642],{"class":9466},"@import",[3599,11644,11645],{"class":8988}," 'tailwindcss'",[3599,11647,3714],{"class":3616},[3599,11649,11650],{"class":3601,"line":3609},[3599,11651,3779],{"emptyLinePlaceholder":3778},[3599,11653,11654],{"class":3601,"line":3620},[3599,11655,11656],{"class":3605},"\u002F* === Визначення keyframes === *\u002F\n",[3599,11658,11659],{"class":3601,"line":3637},[3599,11660,3779],{"emptyLinePlaceholder":3778},[3599,11662,11663,11665,11668],{"class":3601,"line":3654},[3599,11664,11627],{"class":9466},[3599,11666,11667],{"class":3623}," fade-in",[3599,11669,3617],{"class":3616},[3599,11671,11672,11675,11678,11680,11682],{"class":3601,"line":3660},[3599,11673,11674],{"class":3616},"    from { ",[3599,11676,11677],{"class":3623},"opacity",[3599,11679,3627],{"class":3616},[3599,11681,3687],{"class":3681},[3599,11683,9518],{"class":3616},[3599,11685,11686,11689,11691,11693,11695],{"class":3601,"line":3666},[3599,11687,11688],{"class":3616},"    to   { ",[3599,11690,11677],{"class":3623},[3599,11692,3627],{"class":3616},[3599,11694,3697],{"class":3681},[3599,11696,9518],{"class":3616},[3599,11698,11699],{"class":3601,"line":3703},[3599,11700,3720],{"class":3616},[3599,11702,11703],{"class":3601,"line":3717},[3599,11704,3779],{"emptyLinePlaceholder":3778},[3599,11706,11707,11709,11712],{"class":3601,"line":3832},[3599,11708,11627],{"class":9466},[3599,11710,11711],{"class":3623}," fade-in-up",[3599,11713,3617],{"class":3616},[3599,11715,11716],{"class":3601,"line":3838},[3599,11717,11718],{"class":3616},"    from {\n",[3599,11720,11721,11724,11726,11728],{"class":3601,"line":3843},[3599,11722,11723],{"class":3623},"        opacity",[3599,11725,3627],{"class":3616},[3599,11727,3687],{"class":3681},[3599,11729,3714],{"class":3616},[3599,11731,11732,11735,11737,11740,11742,11745],{"class":3601,"line":3849},[3599,11733,11734],{"class":3623},"        transform",[3599,11736,3627],{"class":3616},[3599,11738,11739],{"class":3674},"translateY",[3599,11741,3678],{"class":3616},[3599,11743,11744],{"class":3681},"16px",[3599,11746,3700],{"class":3616},[3599,11748,11749],{"class":3601,"line":3865},[3599,11750,11751],{"class":3616},"    }\n",[3599,11753,11754],{"class":3601,"line":3870},[3599,11755,11756],{"class":3616},"    to {\n",[3599,11758,11759,11761,11763,11765],{"class":3601,"line":3876},[3599,11760,11723],{"class":3623},[3599,11762,3627],{"class":3616},[3599,11764,3697],{"class":3681},[3599,11766,3714],{"class":3616},[3599,11768,11769,11771,11773,11775,11777,11779],{"class":3601,"line":3892},[3599,11770,11734],{"class":3623},[3599,11772,3627],{"class":3616},[3599,11774,11739],{"class":3674},[3599,11776,3678],{"class":3616},[3599,11778,3687],{"class":3681},[3599,11780,3700],{"class":3616},[3599,11782,11783],{"class":3601,"line":3897},[3599,11784,11751],{"class":3616},[3599,11786,11787],{"class":3601,"line":3903},[3599,11788,3720],{"class":3616},[3599,11790,11791],{"class":3601,"line":3919},[3599,11792,3779],{"emptyLinePlaceholder":3778},[3599,11794,11795,11797,11800],{"class":3601,"line":3924},[3599,11796,11627],{"class":9466},[3599,11798,11799],{"class":3623}," fade-in-down",[3599,11801,3617],{"class":3616},[3599,11803,11804],{"class":3601,"line":3930},[3599,11805,11718],{"class":3616},[3599,11807,11808,11810,11812,11814],{"class":3601,"line":4516},[3599,11809,11723],{"class":3623},[3599,11811,3627],{"class":3616},[3599,11813,3687],{"class":3681},[3599,11815,3714],{"class":3616},[3599,11817,11818,11820,11822,11824,11826,11829],{"class":3601,"line":4521},[3599,11819,11734],{"class":3623},[3599,11821,3627],{"class":3616},[3599,11823,11739],{"class":3674},[3599,11825,3678],{"class":3616},[3599,11827,11828],{"class":3681},"-16px",[3599,11830,3700],{"class":3616},[3599,11832,11833],{"class":3601,"line":4527},[3599,11834,11751],{"class":3616},[3599,11836,11837],{"class":3601,"line":4541},[3599,11838,11756],{"class":3616},[3599,11840,11841,11843,11845,11847],{"class":3601,"line":4547},[3599,11842,11723],{"class":3623},[3599,11844,3627],{"class":3616},[3599,11846,3697],{"class":3681},[3599,11848,3714],{"class":3616},[3599,11850,11851,11853,11855,11857,11859,11861],{"class":3601,"line":4553},[3599,11852,11734],{"class":3623},[3599,11854,3627],{"class":3616},[3599,11856,11739],{"class":3674},[3599,11858,3678],{"class":3616},[3599,11860,3687],{"class":3681},[3599,11862,3700],{"class":3616},[3599,11864,11865],{"class":3601,"line":4561},[3599,11866,11751],{"class":3616},[3599,11868,11869],{"class":3601,"line":4567},[3599,11870,3720],{"class":3616},[3599,11872,11873],{"class":3601,"line":4576},[3599,11874,3779],{"emptyLinePlaceholder":3778},[3599,11876,11877,11879,11882],{"class":3601,"line":4581},[3599,11878,11627],{"class":9466},[3599,11880,11881],{"class":3623}," scale-in",[3599,11883,3617],{"class":3616},[3599,11885,11886],{"class":3601,"line":4587},[3599,11887,11718],{"class":3616},[3599,11889,11890,11892,11894,11896],{"class":3601,"line":4601},[3599,11891,11723],{"class":3623},[3599,11893,3627],{"class":3616},[3599,11895,3687],{"class":3681},[3599,11897,3714],{"class":3616},[3599,11899,11900,11902,11904,11906,11908,11911],{"class":3601,"line":4606},[3599,11901,11734],{"class":3623},[3599,11903,3627],{"class":3616},[3599,11905,9166],{"class":3674},[3599,11907,3678],{"class":3616},[3599,11909,11910],{"class":3681},"0.92",[3599,11912,3700],{"class":3616},[3599,11914,11915],{"class":3601,"line":4612},[3599,11916,11751],{"class":3616},[3599,11918,11919],{"class":3601,"line":4619},[3599,11920,11756],{"class":3616},[3599,11922,11923,11925,11927,11929],{"class":3601,"line":4625},[3599,11924,11723],{"class":3623},[3599,11926,3627],{"class":3616},[3599,11928,3697],{"class":3681},[3599,11930,3714],{"class":3616},[3599,11932,11933,11935,11937,11939,11941,11943],{"class":3601,"line":4634},[3599,11934,11734],{"class":3623},[3599,11936,3627],{"class":3616},[3599,11938,9166],{"class":3674},[3599,11940,3678],{"class":3616},[3599,11942,3697],{"class":3681},[3599,11944,3700],{"class":3616},[3599,11946,11947],{"class":3601,"line":4639},[3599,11948,11751],{"class":3616},[3599,11950,11951],{"class":3601,"line":4649},[3599,11952,3720],{"class":3616},[3599,11954,11955],{"class":3601,"line":4659},[3599,11956,3779],{"emptyLinePlaceholder":3778},[3599,11958,11959,11961,11964],{"class":3601,"line":4664},[3599,11960,11627],{"class":9466},[3599,11962,11963],{"class":3623}," slide-in-right",[3599,11965,3617],{"class":3616},[3599,11967,11968,11970,11972,11974,11977,11979,11982],{"class":3601,"line":4670},[3599,11969,11674],{"class":3616},[3599,11971,5479],{"class":3623},[3599,11973,3627],{"class":3616},[3599,11975,11976],{"class":3674},"translateX",[3599,11978,3678],{"class":3616},[3599,11980,11981],{"class":3681},"100%",[3599,11983,11984],{"class":3616},"); }\n",[3599,11986,11987,11989,11991,11993,11995,11997,11999],{"class":3601,"line":4679},[3599,11988,11688],{"class":3616},[3599,11990,5479],{"class":3623},[3599,11992,3627],{"class":3616},[3599,11994,11976],{"class":3674},[3599,11996,3678],{"class":3616},[3599,11998,3687],{"class":3681},[3599,12000,11984],{"class":3616},[3599,12002,12003],{"class":3601,"line":4703},[3599,12004,3720],{"class":3616},[3599,12006,12007],{"class":3601,"line":4719},[3599,12008,3779],{"emptyLinePlaceholder":3778},[3599,12010,12011,12013,12016],{"class":3601,"line":4724},[3599,12012,11627],{"class":9466},[3599,12014,12015],{"class":3623}," slide-out-right",[3599,12017,3617],{"class":3616},[3599,12019,12020,12022,12024,12026,12028,12030,12032],{"class":3601,"line":4738},[3599,12021,11674],{"class":3616},[3599,12023,5479],{"class":3623},[3599,12025,3627],{"class":3616},[3599,12027,11976],{"class":3674},[3599,12029,3678],{"class":3616},[3599,12031,3687],{"class":3681},[3599,12033,11984],{"class":3616},[3599,12035,12036,12038,12040,12042,12044,12046,12048],{"class":3601,"line":4744},[3599,12037,11688],{"class":3616},[3599,12039,5479],{"class":3623},[3599,12041,3627],{"class":3616},[3599,12043,11976],{"class":3674},[3599,12045,3678],{"class":3616},[3599,12047,11981],{"class":3681},[3599,12049,11984],{"class":3616},[3599,12051,12052],{"class":3601,"line":4750},[3599,12053,3720],{"class":3616},[3599,12055,12056],{"class":3601,"line":4758},[3599,12057,3779],{"emptyLinePlaceholder":3778},[3599,12059,12060,12062,12065],{"class":3601,"line":4773},[3599,12061,11627],{"class":9466},[3599,12063,12064],{"class":3623}," shake",[3599,12066,3617],{"class":3616},[3599,12068,12069,12072,12074,12076,12078,12080,12082],{"class":3601,"line":4781},[3599,12070,12071],{"class":3616},"    0%, 100% { ",[3599,12073,5479],{"class":3623},[3599,12075,3627],{"class":3616},[3599,12077,11976],{"class":3674},[3599,12079,3678],{"class":3616},[3599,12081,3687],{"class":3681},[3599,12083,11984],{"class":3616},[3599,12085,12086,12089,12091,12093,12095,12097,12100],{"class":3601,"line":4787},[3599,12087,12088],{"class":3616},"    10%, 50%, 90% { ",[3599,12090,5479],{"class":3623},[3599,12092,3627],{"class":3616},[3599,12094,11976],{"class":3674},[3599,12096,3678],{"class":3616},[3599,12098,12099],{"class":3681},"-6px",[3599,12101,11984],{"class":3616},[3599,12103,12104,12107,12109,12111,12113,12115,12118],{"class":3601,"line":4797},[3599,12105,12106],{"class":3616},"    30%, 70% { ",[3599,12108,5479],{"class":3623},[3599,12110,3627],{"class":3616},[3599,12112,11976],{"class":3674},[3599,12114,3678],{"class":3616},[3599,12116,12117],{"class":3681},"6px",[3599,12119,11984],{"class":3616},[3599,12121,12122],{"class":3601,"line":4822},[3599,12123,3720],{"class":3616},[3599,12125,12126],{"class":3601,"line":4847},[3599,12127,3779],{"emptyLinePlaceholder":3778},[3599,12129,12130,12132,12135],{"class":3601,"line":4856},[3599,12131,11627],{"class":9466},[3599,12133,12134],{"class":3623}," pop",[3599,12136,3617],{"class":3616},[3599,12138,12139,12142,12144,12146,12148,12150,12152],{"class":3601,"line":4861},[3599,12140,12141],{"class":3616},"    0%   { ",[3599,12143,5479],{"class":3623},[3599,12145,3627],{"class":3616},[3599,12147,9166],{"class":3674},[3599,12149,3678],{"class":3616},[3599,12151,3697],{"class":3681},[3599,12153,11984],{"class":3616},[3599,12155,12156,12159,12161,12163,12165,12167,12170],{"class":3601,"line":4875},[3599,12157,12158],{"class":3616},"    50%  { ",[3599,12160,5479],{"class":3623},[3599,12162,3627],{"class":3616},[3599,12164,9166],{"class":3674},[3599,12166,3678],{"class":3616},[3599,12168,12169],{"class":3681},"1.18",[3599,12171,11984],{"class":3616},[3599,12173,12174,12177,12179,12181,12183,12185,12187],{"class":3601,"line":4881},[3599,12175,12176],{"class":3616},"    100% { ",[3599,12178,5479],{"class":3623},[3599,12180,3627],{"class":3616},[3599,12182,9166],{"class":3674},[3599,12184,3678],{"class":3616},[3599,12186,3697],{"class":3681},[3599,12188,11984],{"class":3616},[3599,12190,12191],{"class":3601,"line":4887},[3599,12192,3720],{"class":3616},[3599,12194,12195],{"class":3601,"line":4895},[3599,12196,3779],{"emptyLinePlaceholder":3778},[3599,12198,12199],{"class":3601,"line":4911},[3599,12200,12201],{"class":3605},"\u002F* === Реєстрація у @theme для використання через animate-* === *\u002F\n",[3599,12203,12204],{"class":3601,"line":4917},[3599,12205,3779],{"emptyLinePlaceholder":3778},[3599,12207,12208,12211],{"class":3601,"line":4926},[3599,12209,12210],{"class":9466},"@theme",[3599,12212,3617],{"class":3616},[3599,12214,12215,12218,12221,12224,12227,12230],{"class":3601,"line":4950},[3599,12216,12217],{"class":3616},"    --animate-fade-in:        ",[3599,12219,12220],{"class":3759},"fade-in",[3599,12222,12223],{"class":3616}," 0",[3599,12225,12226],{"class":3612},".4s",[3599,12228,12229],{"class":3759}," ease-out",[3599,12231,3714],{"class":3616},[3599,12233,12234,12237,12240,12242,12245,12247],{"class":3601,"line":4974},[3599,12235,12236],{"class":3616},"    --animate-fade-in-up:     ",[3599,12238,12239],{"class":3759},"fade-in-up",[3599,12241,12223],{"class":3616},[3599,12243,12244],{"class":3612},".5s",[3599,12246,12229],{"class":3759},[3599,12248,3714],{"class":3616},[3599,12250,12251,12254,12257,12259,12261,12263],{"class":3601,"line":4983},[3599,12252,12253],{"class":3616},"    --animate-fade-in-down:   ",[3599,12255,12256],{"class":3759},"fade-in-down",[3599,12258,12223],{"class":3616},[3599,12260,12244],{"class":3612},[3599,12262,12229],{"class":3759},[3599,12264,3714],{"class":3616},[3599,12266,12267,12270,12273,12275,12278,12280],{"class":3601,"line":4988},[3599,12268,12269],{"class":3616},"    --animate-scale-in:       ",[3599,12271,12272],{"class":3759},"scale-in",[3599,12274,12223],{"class":3616},[3599,12276,12277],{"class":3612},".3s",[3599,12279,12229],{"class":3759},[3599,12281,3714],{"class":3616},[3599,12283,12284,12287,12290,12292,12295,12297],{"class":3601,"line":5002},[3599,12285,12286],{"class":3616},"    --animate-slide-in-right: ",[3599,12288,12289],{"class":3759},"slide-in-right",[3599,12291,12223],{"class":3616},[3599,12293,12294],{"class":3612},".35s",[3599,12296,12229],{"class":3759},[3599,12298,3714],{"class":3616},[3599,12300,12301,12304,12307,12309,12311,12314],{"class":3601,"line":5007},[3599,12302,12303],{"class":3616},"    --animate-slide-out-right:",[3599,12305,12306],{"class":3759},"slide-out-right",[3599,12308,12223],{"class":3616},[3599,12310,12294],{"class":3612},[3599,12312,12313],{"class":3759}," ease-in",[3599,12315,12316],{"class":3616}," forwards;\n",[3599,12318,12319,12322,12324,12327],{"class":3601,"line":5013},[3599,12320,12321],{"class":3616},"    --animate-shake:          shake 0",[3599,12323,12244],{"class":3612},[3599,12325,12326],{"class":3759}," ease-in-out",[3599,12328,3714],{"class":3616},[3599,12330,12331,12334,12337,12339],{"class":3601,"line":5020},[3599,12332,12333],{"class":3616},"    --animate-pop:            pop 0",[3599,12335,12336],{"class":3612},".25s",[3599,12338,12326],{"class":3759},[3599,12340,3714],{"class":3616},[3599,12342,12343],{"class":3601,"line":5036},[3599,12344,3720],{"class":3616},[3353,12346,12347,12348,12350],{},"Після реєстрації у ",[3392,12349,12210],{}," класи стають доступними:",[3430,12352,12354],{"className":3741,"code":12353,"language":3743,"meta":3438,"style":3438},"\u003C!-- Елемент з'являється знизу -->\n\u003Cdiv class=\"animate-fade-in-up\">Контент\u003C\u002Fdiv>\n\n\u003C!-- Модальне вікно масштабується при відкритті -->\n\u003Cdiv class=\"animate-scale-in\">Модальне вікно\u003C\u002Fdiv>\n\n\u003C!-- Toast виїжджає справа -->\n\u003Cdiv class=\"animate-slide-in-right\">Повідомлення\u003C\u002Fdiv>\n\n\u003C!-- Форма трясеться при помилці -->\n\u003Cform class=\"animate-shake\" id=\"login-form\">\n\n\u003C!-- Лайк «pop» -->\n\u003Cbutton onclick=\"this.classList.add('animate-pop')\" \n        onanimationend=\"this.classList.remove('animate-pop')\">\n    ❤️\n\u003C\u002Fbutton>\n",[3392,12355,12356,12361,12385,12389,12394,12418,12422,12427,12451,12455,12460,12483,12487,12492,12529,12541,12546],{"__ignoreMap":3438},[3599,12357,12358],{"class":3601,"line":3602},[3599,12359,12360],{"class":3605},"\u003C!-- Елемент з'являється знизу -->\n",[3599,12362,12363,12365,12367,12369,12371,12374,12376,12379,12381,12383],{"class":3601,"line":3609},[3599,12364,3756],{"class":3755},[3599,12366,3820],{"class":3759},[3599,12368,3763],{"class":3623},[3599,12370,3766],{"class":3616},[3599,12372,12373],{"class":3769},"\"animate-fade-in-up\"",[3599,12375,4003],{"class":3755},[3599,12377,12378],{"class":3616},"Контент",[3599,12380,4389],{"class":3755},[3599,12382,3820],{"class":3759},[3599,12384,3773],{"class":3755},[3599,12386,12387],{"class":3601,"line":3620},[3599,12388,3779],{"emptyLinePlaceholder":3778},[3599,12390,12391],{"class":3601,"line":3637},[3599,12392,12393],{"class":3605},"\u003C!-- Модальне вікно масштабується при відкритті -->\n",[3599,12395,12396,12398,12400,12402,12404,12407,12409,12412,12414,12416],{"class":3601,"line":3654},[3599,12397,3756],{"class":3755},[3599,12399,3820],{"class":3759},[3599,12401,3763],{"class":3623},[3599,12403,3766],{"class":3616},[3599,12405,12406],{"class":3769},"\"animate-scale-in\"",[3599,12408,4003],{"class":3755},[3599,12410,12411],{"class":3616},"Модальне вікно",[3599,12413,4389],{"class":3755},[3599,12415,3820],{"class":3759},[3599,12417,3773],{"class":3755},[3599,12419,12420],{"class":3601,"line":3660},[3599,12421,3779],{"emptyLinePlaceholder":3778},[3599,12423,12424],{"class":3601,"line":3666},[3599,12425,12426],{"class":3605},"\u003C!-- Toast виїжджає справа -->\n",[3599,12428,12429,12431,12433,12435,12437,12440,12442,12445,12447,12449],{"class":3601,"line":3703},[3599,12430,3756],{"class":3755},[3599,12432,3820],{"class":3759},[3599,12434,3763],{"class":3623},[3599,12436,3766],{"class":3616},[3599,12438,12439],{"class":3769},"\"animate-slide-in-right\"",[3599,12441,4003],{"class":3755},[3599,12443,12444],{"class":3616},"Повідомлення",[3599,12446,4389],{"class":3755},[3599,12448,3820],{"class":3759},[3599,12450,3773],{"class":3755},[3599,12452,12453],{"class":3601,"line":3717},[3599,12454,3779],{"emptyLinePlaceholder":3778},[3599,12456,12457],{"class":3601,"line":3832},[3599,12458,12459],{"class":3605},"\u003C!-- Форма трясеться при помилці -->\n",[3599,12461,12462,12464,12467,12469,12471,12474,12476,12478,12481],{"class":3601,"line":3838},[3599,12463,3756],{"class":3755},[3599,12465,12466],{"class":3759},"form",[3599,12468,3763],{"class":3623},[3599,12470,3766],{"class":3616},[3599,12472,12473],{"class":3769},"\"animate-shake\"",[3599,12475,7691],{"class":3623},[3599,12477,3766],{"class":3616},[3599,12479,12480],{"class":3769},"\"login-form\"",[3599,12482,3773],{"class":3755},[3599,12484,12485],{"class":3601,"line":3843},[3599,12486,3779],{"emptyLinePlaceholder":3778},[3599,12488,12489],{"class":3601,"line":3849},[3599,12490,12491],{"class":3605},"\u003C!-- Лайк «pop» -->\n",[3599,12493,12494,12496,12498,12501,12503,12505,12508,12510,12513,12515,12518,12520,12523,12526],{"class":3601,"line":3865},[3599,12495,3756],{"class":3755},[3599,12497,3760],{"class":3759},[3599,12499,12500],{"class":3623}," onclick",[3599,12502,3766],{"class":3616},[3599,12504,7783],{"class":3769},[3599,12506,12507],{"class":8954},"this",[3599,12509,8980],{"class":3769},[3599,12511,12512],{"class":8976},"classList",[3599,12514,8980],{"class":3769},[3599,12516,12517],{"class":3674},"add",[3599,12519,3678],{"class":3769},[3599,12521,12522],{"class":8988},"'animate-pop'",[3599,12524,12525],{"class":3769},")\"",[3599,12527,12528],{"class":3616}," \n",[3599,12530,12531,12534,12536,12539],{"class":3601,"line":3870},[3599,12532,12533],{"class":3623},"        onanimationend",[3599,12535,3766],{"class":3616},[3599,12537,12538],{"class":3769},"\"this.classList.remove('animate-pop')\"",[3599,12540,3773],{"class":3755},[3599,12542,12543],{"class":3601,"line":3876},[3599,12544,12545],{"class":3616},"    ❤️\n",[3599,12547,12548,12550,12552],{"class":3601,"line":3892},[3599,12549,4389],{"class":3755},[3599,12551,3760],{"class":3759},[3599,12553,3773],{"class":3755},[4319,12555,12556],{":tailwind":4321},[3430,12557,12559],{"className":3741,"code":12558,"language":3743,"meta":3438,"style":3438},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"uk\">\n\u003Chead>\n\u003Cmeta charset=\"UTF-8\">\n\u003Cscript src=\"https:\u002F\u002Fcdn.tailwindcss.com\">\u003C\u002Fscript>\n\u003Clink href=\"https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n\u003Cstyle>\n    @keyframes fadeInUp {\n        from { opacity: 0; transform: translateY(16px); }\n        to { opacity: 1; transform: translateY(0); }\n    }\n    @keyframes scaleIn {\n        from { opacity: 0; transform: scale(0.92); }\n        to { opacity: 1; transform: scale(1); }\n    }\n    @keyframes shake {\n        0%, 100% { transform: translateX(0); }\n        10%, 50%, 90% { transform: translateX(-6px); }\n        30%, 70% { transform: translateX(6px); }\n    }\n    @keyframes pop {\n        0% { transform: scale(1); }\n        50% { transform: scale(1.18); }\n        100% { transform: scale(1); }\n    }\n\n    .animate-fade-in-up { animation: fadeInUp 0.5s ease-out forwards; }\n    .animate-scale-in { animation: scaleIn 0.3s ease-out forwards; }\n    .animate-shake { animation: shake 0.5s ease-in-out forwards; }\n    .animate-pop { animation: pop 0.25s ease-in-out forwards; }\n\u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody class=\"p-6 bg-slate-50\" style=\"font-family: 'Inter', system-ui, sans-serif;\">\n    \u003Cdiv class=\"max-w-md mx-auto bg-white rounded-2xl border border-slate-200 p-6 shadow-sm space-y-6\">\n        \u003Cp class=\"text-xs font-bold text-slate-400 uppercase tracking-widest text-center\">Custom Keyframe Animations Trigger\u003C\u002Fp>\n        \n        \u003C!-- Target Animation Box -->\n        \u003Cdiv class=\"h-44 flex items-center justify-center border border-slate-100 bg-slate-50\u002F50 rounded-xl p-4 overflow-hidden\">\n            \u003Cdiv id=\"animateTarget\" class=\"w-32 h-32 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl flex flex-col items-center justify-center text-white shadow-lg\">\n                \u003Cspan id=\"targetIcon\" class=\"text-3xl\">🔮\u003C\u002Fspan>\n                \u003Cspan id=\"targetLabel\" class=\"text-[10px] font-bold mt-1 uppercase tracking-wider\">Animation\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n\n        \u003C!-- Buttons Panel -->\n        \u003Cdiv class=\"grid grid-cols-2 gap-3\">\n            \u003Cbutton onclick=\"triggerAnim('animate-fade-in-up', '🔮', 'Fade In Up')\" class=\"px-3 py-2 bg-slate-100 hover:bg-slate-200 text-slate-700 text-xs font-semibold rounded-lg transition-all\">\n                ✨ Fade In Up\n            \u003C\u002Fbutton>\n            \u003Cbutton onclick=\"triggerAnim('animate-scale-in', '📦', 'Scale In')\" class=\"px-3 py-2 bg-slate-100 hover:bg-slate-200 text-slate-700 text-xs font-semibold rounded-lg transition-all\">\n                🔎 Scale In\n            \u003C\u002Fbutton>\n            \u003Cbutton onclick=\"triggerAnim('animate-shake', '⚠', 'Shake')\" class=\"px-3 py-2 bg-slate-100 hover:bg-slate-200 text-slate-700 text-xs font-semibold rounded-lg transition-all\">\n                ⚡ Shake\n            \u003C\u002Fbutton>\n            \u003Cbutton onclick=\"triggerAnim('animate-pop', '💖', 'Pop')\" class=\"px-3 py-2 bg-slate-100 hover:bg-slate-200 text-slate-700 text-xs font-semibold rounded-lg transition-all\">\n                ❤️ Pop (Like)\n            \u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cscript>\n        function triggerAnim(cls, icon, label) {\n            const target = document.getElementById('animateTarget');\n            const targetIcon = document.getElementById('targetIcon');\n            const targetLabel = document.getElementById('targetLabel');\n            \n            \u002F\u002F Set details\n            targetIcon.textContent = icon;\n            targetLabel.textContent = label;\n            \n            \u002F\u002F Clear current animations\n            target.className = \"w-32 h-32 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl flex flex-col items-center justify-center text-white shadow-lg\";\n            \n            \u002F\u002F Force reflow\n            void target.offsetWidth;\n            \n            \u002F\u002F Add class\n            target.classList.add(cls);\n        }\n        \n        \u002F\u002F Listen to animation end and clean class\n        const target = document.getElementById('animateTarget');\n        target.addEventListener('animationend', (e) => {\n            target.classList.remove(e.animationName);\n        });\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[3392,12560,12561,12571,12585,12593,12607,12625,12645,12653,12663,12688,12713,12717,12726,12750,12774,12778,12786,12803,12820,12837,12841,12849,12866,12883,12900,12904,12908,12932,12953,12973,12994,13002,13010,13030,13045,13068,13072,13077,13092,13114,13144,13174,13182,13190,13194,13199,13214,13255,13260,13268,13307,13312,13320,13359,13364,13372,13410,13415,13423,13431,13439,13443,13451,13475,13496,13518,13540,13545,13550,13566,13582,13586,13591,13606,13610,13615,13629,13633,13638,13656,13660,13664,13669,13690,13718,13742,13747,13755,13763],{"__ignoreMap":3438},[3599,12562,12563,12565,12567,12569],{"class":3601,"line":3602},[3599,12564,7421],{"class":3755},[3599,12566,7424],{"class":3759},[3599,12568,7427],{"class":3623},[3599,12570,3773],{"class":3755},[3599,12572,12573,12575,12577,12579,12581,12583],{"class":3601,"line":3609},[3599,12574,3756],{"class":3755},[3599,12576,3743],{"class":3759},[3599,12578,7438],{"class":3623},[3599,12580,3766],{"class":3616},[3599,12582,7443],{"class":3769},[3599,12584,3773],{"class":3755},[3599,12586,12587,12589,12591],{"class":3601,"line":3620},[3599,12588,3756],{"class":3755},[3599,12590,7452],{"class":3759},[3599,12592,3773],{"class":3755},[3599,12594,12595,12597,12599,12601,12603,12605],{"class":3601,"line":3637},[3599,12596,3756],{"class":3755},[3599,12598,7461],{"class":3759},[3599,12600,7464],{"class":3623},[3599,12602,3766],{"class":3616},[3599,12604,7469],{"class":3769},[3599,12606,3773],{"class":3755},[3599,12608,12609,12611,12613,12615,12617,12619,12621,12623],{"class":3601,"line":3654},[3599,12610,3756],{"class":3755},[3599,12612,7478],{"class":3759},[3599,12614,7481],{"class":3623},[3599,12616,3766],{"class":7484},[3599,12618,7487],{"class":3769},[3599,12620,7122],{"class":3755},[3599,12622,7478],{"class":3759},[3599,12624,3773],{"class":3755},[3599,12626,12627,12629,12631,12633,12635,12637,12639,12641,12643],{"class":3601,"line":3660},[3599,12628,3756],{"class":3755},[3599,12630,7500],{"class":3759},[3599,12632,7503],{"class":3623},[3599,12634,3766],{"class":3616},[3599,12636,7508],{"class":3769},[3599,12638,7511],{"class":3623},[3599,12640,3766],{"class":3616},[3599,12642,7516],{"class":3769},[3599,12644,3773],{"class":3755},[3599,12646,12647,12649,12651],{"class":3601,"line":3666},[3599,12648,3756],{"class":3755},[3599,12650,9366],{"class":3759},[3599,12652,3773],{"class":3755},[3599,12654,12655,12658,12661],{"class":3601,"line":3703},[3599,12656,12657],{"class":9466},"    @keyframes",[3599,12659,12660],{"class":3623}," fadeInUp",[3599,12662,3617],{"class":7484},[3599,12664,12665,12668,12670,12672,12674,12676,12678,12680,12682,12684,12686],{"class":3601,"line":3717},[3599,12666,12667],{"class":7484},"        from { ",[3599,12669,11677],{"class":3623},[3599,12671,3627],{"class":7484},[3599,12673,3687],{"class":3681},[3599,12675,9500],{"class":7484},[3599,12677,5479],{"class":3623},[3599,12679,3627],{"class":7484},[3599,12681,11739],{"class":3674},[3599,12683,3678],{"class":7484},[3599,12685,11744],{"class":3681},[3599,12687,11984],{"class":7484},[3599,12689,12690,12693,12695,12697,12699,12701,12703,12705,12707,12709,12711],{"class":3601,"line":3832},[3599,12691,12692],{"class":7484},"        to { ",[3599,12694,11677],{"class":3623},[3599,12696,3627],{"class":7484},[3599,12698,3697],{"class":3681},[3599,12700,9500],{"class":7484},[3599,12702,5479],{"class":3623},[3599,12704,3627],{"class":7484},[3599,12706,11739],{"class":3674},[3599,12708,3678],{"class":7484},[3599,12710,3687],{"class":3681},[3599,12712,11984],{"class":7484},[3599,12714,12715],{"class":3601,"line":3838},[3599,12716,11751],{"class":7484},[3599,12718,12719,12721,12724],{"class":3601,"line":3843},[3599,12720,12657],{"class":9466},[3599,12722,12723],{"class":3623}," scaleIn",[3599,12725,3617],{"class":7484},[3599,12727,12728,12730,12732,12734,12736,12738,12740,12742,12744,12746,12748],{"class":3601,"line":3849},[3599,12729,12667],{"class":7484},[3599,12731,11677],{"class":3623},[3599,12733,3627],{"class":7484},[3599,12735,3687],{"class":3681},[3599,12737,9500],{"class":7484},[3599,12739,5479],{"class":3623},[3599,12741,3627],{"class":7484},[3599,12743,9166],{"class":3674},[3599,12745,3678],{"class":7484},[3599,12747,11910],{"class":3681},[3599,12749,11984],{"class":7484},[3599,12751,12752,12754,12756,12758,12760,12762,12764,12766,12768,12770,12772],{"class":3601,"line":3865},[3599,12753,12692],{"class":7484},[3599,12755,11677],{"class":3623},[3599,12757,3627],{"class":7484},[3599,12759,3697],{"class":3681},[3599,12761,9500],{"class":7484},[3599,12763,5479],{"class":3623},[3599,12765,3627],{"class":7484},[3599,12767,9166],{"class":3674},[3599,12769,3678],{"class":7484},[3599,12771,3697],{"class":3681},[3599,12773,11984],{"class":7484},[3599,12775,12776],{"class":3601,"line":3870},[3599,12777,11751],{"class":7484},[3599,12779,12780,12782,12784],{"class":3601,"line":3876},[3599,12781,12657],{"class":9466},[3599,12783,12064],{"class":3623},[3599,12785,3617],{"class":7484},[3599,12787,12788,12791,12793,12795,12797,12799,12801],{"class":3601,"line":3892},[3599,12789,12790],{"class":7484},"        0%, 100% { ",[3599,12792,5479],{"class":3623},[3599,12794,3627],{"class":7484},[3599,12796,11976],{"class":3674},[3599,12798,3678],{"class":7484},[3599,12800,3687],{"class":3681},[3599,12802,11984],{"class":7484},[3599,12804,12805,12808,12810,12812,12814,12816,12818],{"class":3601,"line":3897},[3599,12806,12807],{"class":7484},"        10%, 50%, 90% { ",[3599,12809,5479],{"class":3623},[3599,12811,3627],{"class":7484},[3599,12813,11976],{"class":3674},[3599,12815,3678],{"class":7484},[3599,12817,12099],{"class":3681},[3599,12819,11984],{"class":7484},[3599,12821,12822,12825,12827,12829,12831,12833,12835],{"class":3601,"line":3903},[3599,12823,12824],{"class":7484},"        30%, 70% { ",[3599,12826,5479],{"class":3623},[3599,12828,3627],{"class":7484},[3599,12830,11976],{"class":3674},[3599,12832,3678],{"class":7484},[3599,12834,12117],{"class":3681},[3599,12836,11984],{"class":7484},[3599,12838,12839],{"class":3601,"line":3919},[3599,12840,11751],{"class":7484},[3599,12842,12843,12845,12847],{"class":3601,"line":3924},[3599,12844,12657],{"class":9466},[3599,12846,12134],{"class":3623},[3599,12848,3617],{"class":7484},[3599,12850,12851,12854,12856,12858,12860,12862,12864],{"class":3601,"line":3930},[3599,12852,12853],{"class":7484},"        0% { ",[3599,12855,5479],{"class":3623},[3599,12857,3627],{"class":7484},[3599,12859,9166],{"class":3674},[3599,12861,3678],{"class":7484},[3599,12863,3697],{"class":3681},[3599,12865,11984],{"class":7484},[3599,12867,12868,12871,12873,12875,12877,12879,12881],{"class":3601,"line":4516},[3599,12869,12870],{"class":7484},"        50% { ",[3599,12872,5479],{"class":3623},[3599,12874,3627],{"class":7484},[3599,12876,9166],{"class":3674},[3599,12878,3678],{"class":7484},[3599,12880,12169],{"class":3681},[3599,12882,11984],{"class":7484},[3599,12884,12885,12888,12890,12892,12894,12896,12898],{"class":3601,"line":4521},[3599,12886,12887],{"class":7484},"        100% { ",[3599,12889,5479],{"class":3623},[3599,12891,3627],{"class":7484},[3599,12893,9166],{"class":3674},[3599,12895,3678],{"class":7484},[3599,12897,3697],{"class":3681},[3599,12899,11984],{"class":7484},[3599,12901,12902],{"class":3601,"line":4527},[3599,12903,11751],{"class":7484},[3599,12905,12906],{"class":3601,"line":4541},[3599,12907,3779],{"emptyLinePlaceholder":3778},[3599,12909,12910,12913,12916,12919,12922,12925,12927,12930],{"class":3601,"line":4547},[3599,12911,12912],{"class":3612},"    .animate-fade-in-up",[3599,12914,12915],{"class":7484}," { ",[3599,12917,12918],{"class":3623},"animation",[3599,12920,12921],{"class":7484},": fadeInUp ",[3599,12923,12924],{"class":3681},"0.5s",[3599,12926,12229],{"class":3630},[3599,12928,12929],{"class":3630}," forwards",[3599,12931,9518],{"class":7484},[3599,12933,12934,12937,12939,12941,12944,12947,12949,12951],{"class":3601,"line":4553},[3599,12935,12936],{"class":3612},"    .animate-scale-in",[3599,12938,12915],{"class":7484},[3599,12940,12918],{"class":3623},[3599,12942,12943],{"class":7484},": scaleIn ",[3599,12945,12946],{"class":3681},"0.3s",[3599,12948,12229],{"class":3630},[3599,12950,12929],{"class":3630},[3599,12952,9518],{"class":7484},[3599,12954,12955,12958,12960,12962,12965,12967,12969,12971],{"class":3601,"line":4561},[3599,12956,12957],{"class":3612},"    .animate-shake",[3599,12959,12915],{"class":7484},[3599,12961,12918],{"class":3623},[3599,12963,12964],{"class":7484},": shake ",[3599,12966,12924],{"class":3681},[3599,12968,12326],{"class":3630},[3599,12970,12929],{"class":3630},[3599,12972,9518],{"class":7484},[3599,12974,12975,12978,12980,12982,12985,12988,12990,12992],{"class":3601,"line":4567},[3599,12976,12977],{"class":3612},"    .animate-pop",[3599,12979,12915],{"class":7484},[3599,12981,12918],{"class":3623},[3599,12983,12984],{"class":7484},": pop ",[3599,12986,12987],{"class":3681},"0.25s",[3599,12989,12326],{"class":3630},[3599,12991,12929],{"class":3630},[3599,12993,9518],{"class":7484},[3599,12995,12996,12998,13000],{"class":3601,"line":4576},[3599,12997,4389],{"class":3755},[3599,12999,9366],{"class":3759},[3599,13001,3773],{"class":3755},[3599,13003,13004,13006,13008],{"class":3601,"line":4581},[3599,13005,4389],{"class":3755},[3599,13007,7452],{"class":3759},[3599,13009,3773],{"class":3755},[3599,13011,13012,13014,13016,13018,13020,13022,13024,13026,13028],{"class":3601,"line":4587},[3599,13013,3756],{"class":3755},[3599,13015,7533],{"class":3759},[3599,13017,3763],{"class":3623},[3599,13019,3766],{"class":3616},[3599,13021,7540],{"class":3769},[3599,13023,4342],{"class":3623},[3599,13025,3766],{"class":3616},[3599,13027,7547],{"class":3769},[3599,13029,3773],{"class":3755},[3599,13031,13032,13034,13036,13038,13040,13043],{"class":3601,"line":4601},[3599,13033,4363],{"class":3755},[3599,13035,3820],{"class":3759},[3599,13037,3763],{"class":3623},[3599,13039,3766],{"class":3616},[3599,13041,13042],{"class":3769},"\"max-w-md mx-auto bg-white rounded-2xl border border-slate-200 p-6 shadow-sm space-y-6\"",[3599,13044,3773],{"class":3755},[3599,13046,13047,13049,13051,13053,13055,13057,13059,13062,13064,13066],{"class":3601,"line":4606},[3599,13048,4372],{"class":3755},[3599,13050,3353],{"class":3759},[3599,13052,3763],{"class":3623},[3599,13054,3766],{"class":3616},[3599,13056,7577],{"class":3769},[3599,13058,4003],{"class":3755},[3599,13060,13061],{"class":3616},"Custom Keyframe Animations Trigger",[3599,13063,4389],{"class":3755},[3599,13065,3353],{"class":3759},[3599,13067,3773],{"class":3755},[3599,13069,13070],{"class":3601,"line":4612},[3599,13071,7593],{"class":3616},[3599,13073,13074],{"class":3601,"line":4619},[3599,13075,13076],{"class":3605},"        \u003C!-- Target Animation Box -->\n",[3599,13078,13079,13081,13083,13085,13087,13090],{"class":3601,"line":4625},[3599,13080,4372],{"class":3755},[3599,13082,3820],{"class":3759},[3599,13084,3763],{"class":3623},[3599,13086,3766],{"class":3616},[3599,13088,13089],{"class":3769},"\"h-44 flex items-center justify-center border border-slate-100 bg-slate-50\u002F50 rounded-xl p-4 overflow-hidden\"",[3599,13091,3773],{"class":3755},[3599,13093,13094,13096,13098,13100,13102,13105,13107,13109,13112],{"class":3601,"line":4634},[3599,13095,4422],{"class":3755},[3599,13097,3820],{"class":3759},[3599,13099,7691],{"class":3623},[3599,13101,3766],{"class":3616},[3599,13103,13104],{"class":3769},"\"animateTarget\"",[3599,13106,3763],{"class":3623},[3599,13108,3766],{"class":3616},[3599,13110,13111],{"class":3769},"\"w-32 h-32 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl flex flex-col items-center justify-center text-white shadow-lg\"",[3599,13113,3773],{"class":3755},[3599,13115,13116,13118,13120,13122,13124,13127,13129,13131,13133,13135,13138,13140,13142],{"class":3601,"line":4639},[3599,13117,4761],{"class":3755},[3599,13119,3599],{"class":3759},[3599,13121,7691],{"class":3623},[3599,13123,3766],{"class":3616},[3599,13125,13126],{"class":3769},"\"targetIcon\"",[3599,13128,3763],{"class":3623},[3599,13130,3766],{"class":3616},[3599,13132,8786],{"class":3769},[3599,13134,4003],{"class":3755},[3599,13136,13137],{"class":3616},"🔮",[3599,13139,4389],{"class":3755},[3599,13141,3599],{"class":3759},[3599,13143,3773],{"class":3755},[3599,13145,13146,13148,13150,13152,13154,13157,13159,13161,13163,13165,13168,13170,13172],{"class":3601,"line":4649},[3599,13147,4761],{"class":3755},[3599,13149,3599],{"class":3759},[3599,13151,7691],{"class":3623},[3599,13153,3766],{"class":3616},[3599,13155,13156],{"class":3769},"\"targetLabel\"",[3599,13158,3763],{"class":3623},[3599,13160,3766],{"class":3616},[3599,13162,8810],{"class":3769},[3599,13164,4003],{"class":3755},[3599,13166,13167],{"class":3616},"Animation",[3599,13169,4389],{"class":3755},[3599,13171,3599],{"class":3759},[3599,13173,3773],{"class":3755},[3599,13175,13176,13178,13180],{"class":3601,"line":4659},[3599,13177,4458],{"class":3755},[3599,13179,3820],{"class":3759},[3599,13181,3773],{"class":3755},[3599,13183,13184,13186,13188],{"class":3601,"line":4664},[3599,13185,4642],{"class":3755},[3599,13187,3820],{"class":3759},[3599,13189,3773],{"class":3755},[3599,13191,13192],{"class":3601,"line":4670},[3599,13193,3779],{"emptyLinePlaceholder":3778},[3599,13195,13196],{"class":3601,"line":4679},[3599,13197,13198],{"class":3605},"        \u003C!-- Buttons Panel -->\n",[3599,13200,13201,13203,13205,13207,13209,13212],{"class":3601,"line":4703},[3599,13202,4372],{"class":3755},[3599,13204,3820],{"class":3759},[3599,13206,3763],{"class":3623},[3599,13208,3766],{"class":3616},[3599,13210,13211],{"class":3769},"\"grid grid-cols-2 gap-3\"",[3599,13213,3773],{"class":3755},[3599,13215,13216,13218,13220,13222,13224,13226,13229,13231,13234,13236,13239,13241,13244,13246,13248,13250,13253],{"class":3601,"line":4719},[3599,13217,4422],{"class":3755},[3599,13219,3760],{"class":3759},[3599,13221,12500],{"class":3623},[3599,13223,3766],{"class":3616},[3599,13225,7783],{"class":3769},[3599,13227,13228],{"class":3674},"triggerAnim",[3599,13230,3678],{"class":3769},[3599,13232,13233],{"class":8988},"'animate-fade-in-up'",[3599,13235,3403],{"class":3769},[3599,13237,13238],{"class":8988},"'🔮'",[3599,13240,3403],{"class":3769},[3599,13242,13243],{"class":8988},"'Fade In Up'",[3599,13245,12525],{"class":3769},[3599,13247,3763],{"class":3623},[3599,13249,3766],{"class":3616},[3599,13251,13252],{"class":3769},"\"px-3 py-2 bg-slate-100 hover:bg-slate-200 text-slate-700 text-xs font-semibold rounded-lg transition-all\"",[3599,13254,3773],{"class":3755},[3599,13256,13257],{"class":3601,"line":4724},[3599,13258,13259],{"class":3616},"                ✨ Fade In Up\n",[3599,13261,13262,13264,13266],{"class":3601,"line":4738},[3599,13263,4458],{"class":3755},[3599,13265,3760],{"class":3759},[3599,13267,3773],{"class":3755},[3599,13269,13270,13272,13274,13276,13278,13280,13282,13284,13287,13289,13292,13294,13297,13299,13301,13303,13305],{"class":3601,"line":4744},[3599,13271,4422],{"class":3755},[3599,13273,3760],{"class":3759},[3599,13275,12500],{"class":3623},[3599,13277,3766],{"class":3616},[3599,13279,7783],{"class":3769},[3599,13281,13228],{"class":3674},[3599,13283,3678],{"class":3769},[3599,13285,13286],{"class":8988},"'animate-scale-in'",[3599,13288,3403],{"class":3769},[3599,13290,13291],{"class":8988},"'📦'",[3599,13293,3403],{"class":3769},[3599,13295,13296],{"class":8988},"'Scale In'",[3599,13298,12525],{"class":3769},[3599,13300,3763],{"class":3623},[3599,13302,3766],{"class":3616},[3599,13304,13252],{"class":3769},[3599,13306,3773],{"class":3755},[3599,13308,13309],{"class":3601,"line":4750},[3599,13310,13311],{"class":3616},"                🔎 Scale In\n",[3599,13313,13314,13316,13318],{"class":3601,"line":4758},[3599,13315,4458],{"class":3755},[3599,13317,3760],{"class":3759},[3599,13319,3773],{"class":3755},[3599,13321,13322,13324,13326,13328,13330,13332,13334,13336,13339,13341,13344,13346,13349,13351,13353,13355,13357],{"class":3601,"line":4773},[3599,13323,4422],{"class":3755},[3599,13325,3760],{"class":3759},[3599,13327,12500],{"class":3623},[3599,13329,3766],{"class":3616},[3599,13331,7783],{"class":3769},[3599,13333,13228],{"class":3674},[3599,13335,3678],{"class":3769},[3599,13337,13338],{"class":8988},"'animate-shake'",[3599,13340,3403],{"class":3769},[3599,13342,13343],{"class":8988},"'⚠'",[3599,13345,3403],{"class":3769},[3599,13347,13348],{"class":8988},"'Shake'",[3599,13350,12525],{"class":3769},[3599,13352,3763],{"class":3623},[3599,13354,3766],{"class":3616},[3599,13356,13252],{"class":3769},[3599,13358,3773],{"class":3755},[3599,13360,13361],{"class":3601,"line":4781},[3599,13362,13363],{"class":3616},"                ⚡ Shake\n",[3599,13365,13366,13368,13370],{"class":3601,"line":4787},[3599,13367,4458],{"class":3755},[3599,13369,3760],{"class":3759},[3599,13371,3773],{"class":3755},[3599,13373,13374,13376,13378,13380,13382,13384,13386,13388,13390,13392,13395,13397,13400,13402,13404,13406,13408],{"class":3601,"line":4797},[3599,13375,4422],{"class":3755},[3599,13377,3760],{"class":3759},[3599,13379,12500],{"class":3623},[3599,13381,3766],{"class":3616},[3599,13383,7783],{"class":3769},[3599,13385,13228],{"class":3674},[3599,13387,3678],{"class":3769},[3599,13389,12522],{"class":8988},[3599,13391,3403],{"class":3769},[3599,13393,13394],{"class":8988},"'💖'",[3599,13396,3403],{"class":3769},[3599,13398,13399],{"class":8988},"'Pop'",[3599,13401,12525],{"class":3769},[3599,13403,3763],{"class":3623},[3599,13405,3766],{"class":3616},[3599,13407,13252],{"class":3769},[3599,13409,3773],{"class":3755},[3599,13411,13412],{"class":3601,"line":4822},[3599,13413,13414],{"class":3616},"                ❤️ Pop (Like)\n",[3599,13416,13417,13419,13421],{"class":3601,"line":4847},[3599,13418,4458],{"class":3755},[3599,13420,3760],{"class":3759},[3599,13422,3773],{"class":3755},[3599,13424,13425,13427,13429],{"class":3601,"line":4856},[3599,13426,4642],{"class":3755},[3599,13428,3820],{"class":3759},[3599,13430,3773],{"class":3755},[3599,13432,13433,13435,13437],{"class":3601,"line":4861},[3599,13434,4652],{"class":3755},[3599,13436,3820],{"class":3759},[3599,13438,3773],{"class":3755},[3599,13440,13441],{"class":3601,"line":4875},[3599,13442,3779],{"emptyLinePlaceholder":3778},[3599,13444,13445,13447,13449],{"class":3601,"line":4881},[3599,13446,4363],{"class":3755},[3599,13448,7478],{"class":3759},[3599,13450,3773],{"class":3755},[3599,13452,13453,13455,13458,13460,13463,13465,13468,13470,13472],{"class":3601,"line":4887},[3599,13454,8955],{"class":8954},[3599,13456,13457],{"class":3674}," triggerAnim",[3599,13459,3678],{"class":7484},[3599,13461,13462],{"class":8976},"cls",[3599,13464,3403],{"class":7484},[3599,13466,13467],{"class":8976},"icon",[3599,13469,3403],{"class":7484},[3599,13471,8487],{"class":8976},[3599,13473,13474],{"class":7484},") {\n",[3599,13476,13477,13479,13481,13483,13485,13487,13489,13491,13494],{"class":3601,"line":4895},[3599,13478,8966],{"class":8954},[3599,13480,9311],{"class":8969},[3599,13482,8973],{"class":3616},[3599,13484,8977],{"class":8976},[3599,13486,8980],{"class":7484},[3599,13488,8983],{"class":3674},[3599,13490,3678],{"class":7484},[3599,13492,13493],{"class":8988},"'animateTarget'",[3599,13495,3700],{"class":7484},[3599,13497,13498,13500,13503,13505,13507,13509,13511,13513,13516],{"class":3601,"line":4911},[3599,13499,8966],{"class":8954},[3599,13501,13502],{"class":8969}," targetIcon",[3599,13504,8973],{"class":3616},[3599,13506,8977],{"class":8976},[3599,13508,8980],{"class":7484},[3599,13510,8983],{"class":3674},[3599,13512,3678],{"class":7484},[3599,13514,13515],{"class":8988},"'targetIcon'",[3599,13517,3700],{"class":7484},[3599,13519,13520,13522,13525,13527,13529,13531,13533,13535,13538],{"class":3601,"line":4917},[3599,13521,8966],{"class":8954},[3599,13523,13524],{"class":8969}," targetLabel",[3599,13526,8973],{"class":3616},[3599,13528,8977],{"class":8976},[3599,13530,8980],{"class":7484},[3599,13532,8983],{"class":3674},[3599,13534,3678],{"class":7484},[3599,13536,13537],{"class":8988},"'targetLabel'",[3599,13539,3700],{"class":7484},[3599,13541,13542],{"class":3601,"line":4926},[3599,13543,13544],{"class":7484},"            \n",[3599,13546,13547],{"class":3601,"line":4950},[3599,13548,13549],{"class":3605},"            \u002F\u002F Set details\n",[3599,13551,13552,13555,13557,13559,13561,13564],{"class":3601,"line":4974},[3599,13553,13554],{"class":8976},"            targetIcon",[3599,13556,8980],{"class":7484},[3599,13558,9156],{"class":8976},[3599,13560,8973],{"class":3616},[3599,13562,13563],{"class":8976}," icon",[3599,13565,3714],{"class":7484},[3599,13567,13568,13571,13573,13575,13577,13580],{"class":3601,"line":4983},[3599,13569,13570],{"class":8976},"            targetLabel",[3599,13572,8980],{"class":7484},[3599,13574,9156],{"class":8976},[3599,13576,8973],{"class":3616},[3599,13578,13579],{"class":8976}," label",[3599,13581,3714],{"class":7484},[3599,13583,13584],{"class":3601,"line":4988},[3599,13585,13544],{"class":7484},[3599,13587,13588],{"class":3601,"line":5002},[3599,13589,13590],{"class":3605},"            \u002F\u002F Clear current animations\n",[3599,13592,13593,13595,13597,13599,13601,13604],{"class":3601,"line":5007},[3599,13594,9332],{"class":8976},[3599,13596,8980],{"class":7484},[3599,13598,9337],{"class":8976},[3599,13600,8973],{"class":3616},[3599,13602,13603],{"class":8988}," \"w-32 h-32 bg-gradient-to-br from-indigo-500 to-purple-600 rounded-2xl flex flex-col items-center justify-center text-white shadow-lg\"",[3599,13605,3714],{"class":7484},[3599,13607,13608],{"class":3601,"line":5013},[3599,13609,13544],{"class":7484},[3599,13611,13612],{"class":3601,"line":5020},[3599,13613,13614],{"class":3605},"            \u002F\u002F Force reflow\n",[3599,13616,13617,13620,13622,13624,13627],{"class":3601,"line":5036},[3599,13618,13619],{"class":8954},"            void",[3599,13621,9311],{"class":8976},[3599,13623,8980],{"class":7484},[3599,13625,13626],{"class":8976},"offsetWidth",[3599,13628,3714],{"class":7484},[3599,13630,13631],{"class":3601,"line":5042},[3599,13632,13544],{"class":7484},[3599,13634,13635],{"class":3601,"line":5051},[3599,13636,13637],{"class":3605},"            \u002F\u002F Add class\n",[3599,13639,13640,13642,13644,13646,13648,13650,13652,13654],{"class":3601,"line":5075},[3599,13641,9332],{"class":8976},[3599,13643,8980],{"class":7484},[3599,13645,12512],{"class":8976},[3599,13647,8980],{"class":7484},[3599,13649,12517],{"class":3674},[3599,13651,3678],{"class":7484},[3599,13653,13462],{"class":8976},[3599,13655,3700],{"class":7484},[3599,13657,13658],{"class":3601,"line":5099},[3599,13659,9831],{"class":7484},[3599,13661,13662],{"class":3601,"line":5108},[3599,13663,7593],{"class":7484},[3599,13665,13666],{"class":3601,"line":5113},[3599,13667,13668],{"class":3605},"        \u002F\u002F Listen to animation end and clean class\n",[3599,13670,13671,13674,13676,13678,13680,13682,13684,13686,13688],{"class":3601,"line":5122},[3599,13672,13673],{"class":8954},"        const",[3599,13675,9311],{"class":8969},[3599,13677,8973],{"class":3616},[3599,13679,8977],{"class":8976},[3599,13681,8980],{"class":7484},[3599,13683,8983],{"class":3674},[3599,13685,3678],{"class":7484},[3599,13687,13493],{"class":8988},[3599,13689,3700],{"class":7484},[3599,13691,13692,13695,13697,13700,13702,13705,13708,13711,13713,13716],{"class":3601,"line":5131},[3599,13693,13694],{"class":8976},"        target",[3599,13696,8980],{"class":7484},[3599,13698,13699],{"class":3674},"addEventListener",[3599,13701,3678],{"class":7484},[3599,13703,13704],{"class":8988},"'animationend'",[3599,13706,13707],{"class":7484},", (",[3599,13709,13710],{"class":8976},"e",[3599,13712,5537],{"class":7484},[3599,13714,13715],{"class":8954},"=>",[3599,13717,3617],{"class":7484},[3599,13719,13720,13722,13724,13726,13728,13731,13733,13735,13737,13740],{"class":3601,"line":5136},[3599,13721,9332],{"class":8976},[3599,13723,8980],{"class":7484},[3599,13725,12512],{"class":8976},[3599,13727,8980],{"class":7484},[3599,13729,13730],{"class":3674},"remove",[3599,13732,3678],{"class":7484},[3599,13734,13710],{"class":8976},[3599,13736,8980],{"class":7484},[3599,13738,13739],{"class":8976},"animationName",[3599,13741,3700],{"class":7484},[3599,13743,13744],{"class":3601,"line":5142},[3599,13745,13746],{"class":7484},"        });\n",[3599,13748,13749,13751,13753],{"class":3601,"line":5151},[3599,13750,4652],{"class":3755},[3599,13752,7478],{"class":3759},[3599,13754,3773],{"class":3755},[3599,13756,13757,13759,13761],{"class":3601,"line":5175},[3599,13758,4389],{"class":3755},[3599,13760,7533],{"class":3759},[3599,13762,3773],{"class":3755},[3599,13764,13765,13767,13769],{"class":3601,"line":5191},[3599,13766,4389],{"class":3755},[3599,13768,3743],{"class":3759},[3599,13770,3773],{"class":3755},[3353,13772,13773,13776,13777,5343],{},[3363,13774,13775],{},"Довільні анімації без реєстрації"," — через синтаксис ",[3392,13778,13779],{},"animate-[...]",[3430,13781,13783],{"className":3741,"code":13782,"language":3743,"meta":3438,"style":3438},"\u003C!-- Пряме використання без @theme -->\n\u003Cdiv class=\"animate-[fade-in-up_0.4s_ease-out]\">\n\u003Cdiv class=\"animate-[slide-in-right_0.3s_ease-out_forwards]\">\n\n\u003C!-- Тільки один раз (forwards) -->\n\u003Cdiv class=\"animate-[scale-in_0.3s_ease-out_forwards]\">\n",[3392,13784,13785,13790,13805,13820,13824,13829],{"__ignoreMap":3438},[3599,13786,13787],{"class":3601,"line":3602},[3599,13788,13789],{"class":3605},"\u003C!-- Пряме використання без @theme -->\n",[3599,13791,13792,13794,13796,13798,13800,13803],{"class":3601,"line":3609},[3599,13793,3756],{"class":3755},[3599,13795,3820],{"class":3759},[3599,13797,3763],{"class":3623},[3599,13799,3766],{"class":3616},[3599,13801,13802],{"class":3769},"\"animate-[fade-in-up_0.4s_ease-out]\"",[3599,13804,3773],{"class":3755},[3599,13806,13807,13809,13811,13813,13815,13818],{"class":3601,"line":3620},[3599,13808,3756],{"class":3755},[3599,13810,3820],{"class":3759},[3599,13812,3763],{"class":3623},[3599,13814,3766],{"class":3616},[3599,13816,13817],{"class":3769},"\"animate-[slide-in-right_0.3s_ease-out_forwards]\"",[3599,13819,3773],{"class":3755},[3599,13821,13822],{"class":3601,"line":3637},[3599,13823,3779],{"emptyLinePlaceholder":3778},[3599,13825,13826],{"class":3601,"line":3654},[3599,13827,13828],{"class":3605},"\u003C!-- Тільки один раз (forwards) -->\n",[3599,13830,13831,13833,13835,13837,13839,13842],{"class":3601,"line":3660},[3599,13832,3756],{"class":3755},[3599,13834,3820],{"class":3759},[3599,13836,3763],{"class":3623},[3599,13838,3766],{"class":3616},[3599,13840,13841],{"class":3769},"\"animate-[scale-in_0.3s_ease-out_forwards]\"",[3599,13843,3773],{"class":3755},[3409,13845],{},[3348,13847,13849],{"id":13848},"частина-iv-3d-трансформації-нові-можливості-v4","Частина IV. 3D-трансформації: нові можливості v4",[3416,13851,13853],{"id":13852},"_41-що-нового-у-v4-повна-підтримка-3d","4.1. Що нового у v4: повна підтримка 3D",[3353,13855,13856,13857,13860],{},"Tailwind v4 додав повноцінну підтримку 3D-трансформацій — те, що раніше вимагало написати ",[3392,13858,13859],{},"[style=\"transform: rotateX(45deg)\"]"," або окремий CSS-клас, тепер реалізується через стандартні утиліти.",[3353,13862,13863],{},"Новий набір 3D-утиліт:",[3443,13865,13866,13876],{},[3446,13867,13868],{},[3449,13869,13870,13872,13874],{},[3452,13871,3457],{},[3452,13873,3460],{},[3452,13875,9906],{},[3462,13877,13878,13893,13908,13923,13938,13957,13972,13987,14002,14017,14032],{},[3449,13879,13880,13885,13890],{},[3467,13881,13882],{},[3392,13883,13884],{},"perspective-{n}",[3467,13886,13887],{},[3392,13888,13889],{},"perspective: {n}px",[3467,13891,13892],{},"Глибина перспективи",[3449,13894,13895,13900,13905],{},[3467,13896,13897],{},[3392,13898,13899],{},"perspective-origin-*",[3467,13901,13902],{},[3392,13903,13904],{},"perspective-origin",[3467,13906,13907],{},"Точка зору",[3449,13909,13910,13915,13920],{},[3467,13911,13912],{},[3392,13913,13914],{},"rotate-x-{deg}",[3467,13916,13917],{},[3392,13918,13919],{},"rotateX({deg}deg)",[3467,13921,13922],{},"Поворот по осі X",[3449,13924,13925,13930,13935],{},[3467,13926,13927],{},[3392,13928,13929],{},"rotate-y-{deg}",[3467,13931,13932],{},[3392,13933,13934],{},"rotateY({deg}deg)",[3467,13936,13937],{},"Поворот по осі Y",[3449,13939,13940,13945,13950],{},[3467,13941,13942],{},[3392,13943,13944],{},"rotate-z-{deg}",[3467,13946,13947],{},[3392,13948,13949],{},"rotateZ({deg}deg)",[3467,13951,13952,13953,13956],{},"Поворот по осі Z (= ",[3392,13954,13955],{},"rotate-*",")",[3449,13958,13959,13964,13969],{},[3467,13960,13961],{},[3392,13962,13963],{},"scale-z-{n}",[3467,13965,13966],{},[3392,13967,13968],{},"scaleZ({n})",[3467,13970,13971],{},"Масштаб по осі Z",[3449,13973,13974,13979,13984],{},[3467,13975,13976],{},[3392,13977,13978],{},"translate-z-{n}",[3467,13980,13981],{},[3392,13982,13983],{},"translateZ({n})",[3467,13985,13986],{},"Переміщення по осі Z",[3449,13988,13989,13994,13999],{},[3467,13990,13991],{},[3392,13992,13993],{},"transform-style-3d",[3467,13995,13996],{},[3392,13997,13998],{},"transform-style: preserve-3d",[3467,14000,14001],{},"Зберегти 3D-простір для нащадків",[3449,14003,14004,14009,14014],{},[3467,14005,14006],{},[3392,14007,14008],{},"transform-style-flat",[3467,14010,14011],{},[3392,14012,14013],{},"transform-style: flat",[3467,14015,14016],{},"Скасувати 3D для нащадків",[3449,14018,14019,14024,14029],{},[3467,14020,14021],{},[3392,14022,14023],{},"backface-visible",[3467,14025,14026],{},[3392,14027,14028],{},"backface-visibility: visible",[3467,14030,14031],{},"Зворотній бік видимий",[3449,14033,14034,14039,14044],{},[3467,14035,14036],{},[3392,14037,14038],{},"backface-hidden",[3467,14040,14041],{},[3392,14042,14043],{},"backface-visibility: hidden",[3467,14045,14046],{},"Зворотній бік прихований",[3409,14048],{},[3416,14050,14052],{"id":14051},"_42-perspective-налаштування-глибини","4.2. Perspective: налаштування глибини",[3353,14054,14055,14058],{},[3392,14056,14057],{},"perspective"," — ключ до реалістичного 3D. Він визначає відстань від спостерігача до площини Z=0. Чим менше значення — тим «ближчий» спостерігач, тим більш драматична перспектива:",[3430,14060,14062],{"className":3741,"code":14061,"language":3743,"meta":3438,"style":3438},"\u003C!-- perspective застосовується до БАТЬКА, а трансформація — до НАЩАДКА -->\n\u003Cdiv class=\"perspective-[500px]\">       \u003C!-- близька перспектива — драматична -->\n    \u003Cdiv class=\"rotate-y-45\">Картка\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003Cdiv class=\"perspective-[800px]\">       \u003C!-- середня — збалансована -->\n    \u003Cdiv class=\"rotate-y-45\">Картка\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003Cdiv class=\"perspective-[1200px]\">      \u003C!-- далека — тонка -->\n    \u003Cdiv class=\"rotate-y-45\">Картка\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- Вбудована шкала perspective -->\n\u003Cdiv class=\"perspective-dramatic\">   \u003C!-- 100px — дуже близько -->\n\u003Cdiv class=\"perspective-near\">       \u003C!-- 300px -->\n\u003Cdiv class=\"perspective-normal\">     \u003C!-- 500px -->\n\u003Cdiv class=\"perspective-midrange\">   \u003C!-- 800px -->\n\u003Cdiv class=\"perspective-distant\">    \u003C!-- 1200px -->\n",[3392,14063,14064,14069,14087,14111,14119,14123,14141,14163,14171,14175,14193,14215,14223,14227,14232,14250,14268,14286,14304],{"__ignoreMap":3438},[3599,14065,14066],{"class":3601,"line":3602},[3599,14067,14068],{"class":3605},"\u003C!-- perspective застосовується до БАТЬКА, а трансформація — до НАЩАДКА -->\n",[3599,14070,14071,14073,14075,14077,14079,14082,14084],{"class":3601,"line":3609},[3599,14072,3756],{"class":3755},[3599,14074,3820],{"class":3759},[3599,14076,3763],{"class":3623},[3599,14078,3766],{"class":3616},[3599,14080,14081],{"class":3769},"\"perspective-[500px]\"",[3599,14083,4003],{"class":3755},[3599,14085,14086],{"class":3605},"       \u003C!-- близька перспектива — драматична -->\n",[3599,14088,14089,14091,14093,14095,14097,14100,14102,14105,14107,14109],{"class":3601,"line":3620},[3599,14090,4363],{"class":3755},[3599,14092,3820],{"class":3759},[3599,14094,3763],{"class":3623},[3599,14096,3766],{"class":3616},[3599,14098,14099],{"class":3769},"\"rotate-y-45\"",[3599,14101,4003],{"class":3755},[3599,14103,14104],{"class":3616},"Картка",[3599,14106,4389],{"class":3755},[3599,14108,3820],{"class":3759},[3599,14110,3773],{"class":3755},[3599,14112,14113,14115,14117],{"class":3601,"line":3637},[3599,14114,4389],{"class":3755},[3599,14116,3820],{"class":3759},[3599,14118,3773],{"class":3755},[3599,14120,14121],{"class":3601,"line":3654},[3599,14122,3779],{"emptyLinePlaceholder":3778},[3599,14124,14125,14127,14129,14131,14133,14136,14138],{"class":3601,"line":3660},[3599,14126,3756],{"class":3755},[3599,14128,3820],{"class":3759},[3599,14130,3763],{"class":3623},[3599,14132,3766],{"class":3616},[3599,14134,14135],{"class":3769},"\"perspective-[800px]\"",[3599,14137,4003],{"class":3755},[3599,14139,14140],{"class":3605},"       \u003C!-- середня — збалансована -->\n",[3599,14142,14143,14145,14147,14149,14151,14153,14155,14157,14159,14161],{"class":3601,"line":3666},[3599,14144,4363],{"class":3755},[3599,14146,3820],{"class":3759},[3599,14148,3763],{"class":3623},[3599,14150,3766],{"class":3616},[3599,14152,14099],{"class":3769},[3599,14154,4003],{"class":3755},[3599,14156,14104],{"class":3616},[3599,14158,4389],{"class":3755},[3599,14160,3820],{"class":3759},[3599,14162,3773],{"class":3755},[3599,14164,14165,14167,14169],{"class":3601,"line":3703},[3599,14166,4389],{"class":3755},[3599,14168,3820],{"class":3759},[3599,14170,3773],{"class":3755},[3599,14172,14173],{"class":3601,"line":3717},[3599,14174,3779],{"emptyLinePlaceholder":3778},[3599,14176,14177,14179,14181,14183,14185,14188,14190],{"class":3601,"line":3832},[3599,14178,3756],{"class":3755},[3599,14180,3820],{"class":3759},[3599,14182,3763],{"class":3623},[3599,14184,3766],{"class":3616},[3599,14186,14187],{"class":3769},"\"perspective-[1200px]\"",[3599,14189,4003],{"class":3755},[3599,14191,14192],{"class":3605},"      \u003C!-- далека — тонка -->\n",[3599,14194,14195,14197,14199,14201,14203,14205,14207,14209,14211,14213],{"class":3601,"line":3838},[3599,14196,4363],{"class":3755},[3599,14198,3820],{"class":3759},[3599,14200,3763],{"class":3623},[3599,14202,3766],{"class":3616},[3599,14204,14099],{"class":3769},[3599,14206,4003],{"class":3755},[3599,14208,14104],{"class":3616},[3599,14210,4389],{"class":3755},[3599,14212,3820],{"class":3759},[3599,14214,3773],{"class":3755},[3599,14216,14217,14219,14221],{"class":3601,"line":3843},[3599,14218,4389],{"class":3755},[3599,14220,3820],{"class":3759},[3599,14222,3773],{"class":3755},[3599,14224,14225],{"class":3601,"line":3849},[3599,14226,3779],{"emptyLinePlaceholder":3778},[3599,14228,14229],{"class":3601,"line":3865},[3599,14230,14231],{"class":3605},"\u003C!-- Вбудована шкала perspective -->\n",[3599,14233,14234,14236,14238,14240,14242,14245,14247],{"class":3601,"line":3870},[3599,14235,3756],{"class":3755},[3599,14237,3820],{"class":3759},[3599,14239,3763],{"class":3623},[3599,14241,3766],{"class":3616},[3599,14243,14244],{"class":3769},"\"perspective-dramatic\"",[3599,14246,4003],{"class":3755},[3599,14248,14249],{"class":3605},"   \u003C!-- 100px — дуже близько -->\n",[3599,14251,14252,14254,14256,14258,14260,14263,14265],{"class":3601,"line":3876},[3599,14253,3756],{"class":3755},[3599,14255,3820],{"class":3759},[3599,14257,3763],{"class":3623},[3599,14259,3766],{"class":3616},[3599,14261,14262],{"class":3769},"\"perspective-near\"",[3599,14264,4003],{"class":3755},[3599,14266,14267],{"class":3605},"       \u003C!-- 300px -->\n",[3599,14269,14270,14272,14274,14276,14278,14281,14283],{"class":3601,"line":3892},[3599,14271,3756],{"class":3755},[3599,14273,3820],{"class":3759},[3599,14275,3763],{"class":3623},[3599,14277,3766],{"class":3616},[3599,14279,14280],{"class":3769},"\"perspective-normal\"",[3599,14282,4003],{"class":3755},[3599,14284,14285],{"class":3605},"     \u003C!-- 500px -->\n",[3599,14287,14288,14290,14292,14294,14296,14299,14301],{"class":3601,"line":3897},[3599,14289,3756],{"class":3755},[3599,14291,3820],{"class":3759},[3599,14293,3763],{"class":3623},[3599,14295,3766],{"class":3616},[3599,14297,14298],{"class":3769},"\"perspective-midrange\"",[3599,14300,4003],{"class":3755},[3599,14302,14303],{"class":3605},"   \u003C!-- 800px -->\n",[3599,14305,14306,14308,14310,14312,14314,14317,14319],{"class":3601,"line":3903},[3599,14307,3756],{"class":3755},[3599,14309,3820],{"class":3759},[3599,14311,3763],{"class":3623},[3599,14313,3766],{"class":3616},[3599,14315,14316],{"class":3769},"\"perspective-distant\"",[3599,14318,4003],{"class":3755},[3599,14320,14321],{"class":3605},"    \u003C!-- 1200px -->\n",[3409,14323],{},[3416,14325,14327],{"id":14326},"_43-класичний-3d-card-flip","4.3. Класичний 3D card flip",[3353,14329,14330,14333,14334,14337,14338,5343],{},[3363,14331,14332],{},"Card flip"," (перекидання картки) — найпоширеніший 3D-ефект в UI. Реалізується через ",[3392,14335,14336],{},"rotate-y-180"," та ",[3392,14339,14038],{},[3430,14341,14343],{"className":3741,"code":14342,"language":3743,"meta":3438,"style":3438},"\u003C!-- Обгортка: встановлює perspective та відстежує hover -->\n\u003Cdiv class=\"perspective-[800px] group w-64 h-40 cursor-pointer\">\n\n    \u003C!-- Внутрішній контейнер: обертається при hover -->\n    \u003C!-- transform-style-3d: дочірні елементи живуть у 3D-просторі -->\n    \u003Cdiv class=\"relative w-full h-full transition-transform duration-700 ease-in-out\n                transform-style-3d group-hover:rotate-y-180\">\n\n        \u003C!-- Лицьова сторона -->\n        \u003Cdiv class=\"absolute inset-0 rounded-2xl bg-indigo-600 text-white\n                    flex items-center justify-center font-bold text-lg\n                    backface-hidden\">\n            Лицьова\n        \u003C\u002Fdiv>\n\n        \u003C!-- Зворотня сторона: вже повернута на 180° -->\n        \u003Cdiv class=\"absolute inset-0 rounded-2xl bg-violet-600 text-white\n                    flex items-center justify-center font-bold text-lg\n                    backface-hidden rotate-y-180\">\n            Зворотня\n        \u003C\u002Fdiv>\n\n    \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[3392,14344,14345,14350,14365,14369,14374,14379,14392,14399,14403,14408,14421,14426,14433,14438,14446,14450,14455,14468,14472,14479,14484,14492,14496,14504],{"__ignoreMap":3438},[3599,14346,14347],{"class":3601,"line":3602},[3599,14348,14349],{"class":3605},"\u003C!-- Обгортка: встановлює perspective та відстежує hover -->\n",[3599,14351,14352,14354,14356,14358,14360,14363],{"class":3601,"line":3609},[3599,14353,3756],{"class":3755},[3599,14355,3820],{"class":3759},[3599,14357,3763],{"class":3623},[3599,14359,3766],{"class":3616},[3599,14361,14362],{"class":3769},"\"perspective-[800px] group w-64 h-40 cursor-pointer\"",[3599,14364,3773],{"class":3755},[3599,14366,14367],{"class":3601,"line":3620},[3599,14368,3779],{"emptyLinePlaceholder":3778},[3599,14370,14371],{"class":3601,"line":3637},[3599,14372,14373],{"class":3605},"    \u003C!-- Внутрішній контейнер: обертається при hover -->\n",[3599,14375,14376],{"class":3601,"line":3654},[3599,14377,14378],{"class":3605},"    \u003C!-- transform-style-3d: дочірні елементи живуть у 3D-просторі -->\n",[3599,14380,14381,14383,14385,14387,14389],{"class":3601,"line":3660},[3599,14382,4363],{"class":3755},[3599,14384,3820],{"class":3759},[3599,14386,3763],{"class":3623},[3599,14388,3766],{"class":3616},[3599,14390,14391],{"class":3769},"\"relative w-full h-full transition-transform duration-700 ease-in-out\n",[3599,14393,14394,14397],{"class":3601,"line":3666},[3599,14395,14396],{"class":3769},"                transform-style-3d group-hover:rotate-y-180\"",[3599,14398,3773],{"class":3755},[3599,14400,14401],{"class":3601,"line":3703},[3599,14402,3779],{"emptyLinePlaceholder":3778},[3599,14404,14405],{"class":3601,"line":3717},[3599,14406,14407],{"class":3605},"        \u003C!-- Лицьова сторона -->\n",[3599,14409,14410,14412,14414,14416,14418],{"class":3601,"line":3832},[3599,14411,4372],{"class":3755},[3599,14413,3820],{"class":3759},[3599,14415,3763],{"class":3623},[3599,14417,3766],{"class":3616},[3599,14419,14420],{"class":3769},"\"absolute inset-0 rounded-2xl bg-indigo-600 text-white\n",[3599,14422,14423],{"class":3601,"line":3838},[3599,14424,14425],{"class":3769},"                    flex items-center justify-center font-bold text-lg\n",[3599,14427,14428,14431],{"class":3601,"line":3843},[3599,14429,14430],{"class":3769},"                    backface-hidden\"",[3599,14432,3773],{"class":3755},[3599,14434,14435],{"class":3601,"line":3849},[3599,14436,14437],{"class":3616},"            Лицьова\n",[3599,14439,14440,14442,14444],{"class":3601,"line":3865},[3599,14441,4642],{"class":3755},[3599,14443,3820],{"class":3759},[3599,14445,3773],{"class":3755},[3599,14447,14448],{"class":3601,"line":3870},[3599,14449,3779],{"emptyLinePlaceholder":3778},[3599,14451,14452],{"class":3601,"line":3876},[3599,14453,14454],{"class":3605},"        \u003C!-- Зворотня сторона: вже повернута на 180° -->\n",[3599,14456,14457,14459,14461,14463,14465],{"class":3601,"line":3892},[3599,14458,4372],{"class":3755},[3599,14460,3820],{"class":3759},[3599,14462,3763],{"class":3623},[3599,14464,3766],{"class":3616},[3599,14466,14467],{"class":3769},"\"absolute inset-0 rounded-2xl bg-violet-600 text-white\n",[3599,14469,14470],{"class":3601,"line":3897},[3599,14471,14425],{"class":3769},[3599,14473,14474,14477],{"class":3601,"line":3903},[3599,14475,14476],{"class":3769},"                    backface-hidden rotate-y-180\"",[3599,14478,3773],{"class":3755},[3599,14480,14481],{"class":3601,"line":3919},[3599,14482,14483],{"class":3616},"            Зворотня\n",[3599,14485,14486,14488,14490],{"class":3601,"line":3924},[3599,14487,4642],{"class":3755},[3599,14489,3820],{"class":3759},[3599,14491,3773],{"class":3755},[3599,14493,14494],{"class":3601,"line":3930},[3599,14495,3779],{"emptyLinePlaceholder":3778},[3599,14497,14498,14500,14502],{"class":3601,"line":4516},[3599,14499,4652],{"class":3755},[3599,14501,3820],{"class":3759},[3599,14503,3773],{"class":3755},[3599,14505,14506,14508,14510],{"class":3601,"line":4521},[3599,14507,4389],{"class":3755},[3599,14509,3820],{"class":3759},[3599,14511,3773],{"class":3755},[3353,14513,14514],{},"Живий приклад з кількома варіантами:",[4319,14516,14517],{":tailwind":4321},[3430,14518,14520],{"className":3741,"code":14519,"language":3743,"meta":3438,"style":3438},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"uk\">\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cscript src=\"https:\u002F\u002Fcdn.tailwindcss.com\u002F4.0\">\u003C\u002Fscript>\n\u003C\u002Fhead>\n\u003Cbody class=\"bg-slate-100 p-8 flex flex-wrap gap-8 justify-center items-start\"\n      style=\"font-family: system-ui, sans-serif; min-height: 100vh;\">\n\n    \u003Cp class=\"w-full text-center text-xs font-bold uppercase tracking-widest text-slate-400 mb-2\">\n        Наведіть курсор для 3D-перевороту\n    \u003C\u002Fp>\n\n    \u003C!-- Card Flip: горизонтальний -->\n    \u003Cdiv class=\"flex flex-col items-center gap-2\">\n        \u003Cdiv class=\"[perspective:800px] group w-44 h-28 cursor-pointer\">\n            \u003Cdiv class=\"relative w-full h-full [transition:transform_0.6s_ease-in-out]\n                        [transform-style:preserve-3d] group-hover:[transform:rotateY(180deg)]\">\n                \u003C!-- Front -->\n                \u003Cdiv class=\"absolute inset-0 rounded-2xl bg-gradient-to-br from-indigo-500 to-violet-600\n                            flex flex-col items-center justify-center text-white\n                            [backface-visibility:hidden]\">\n                    \u003Cp class=\"text-2xl mb-1\">📦\u003C\u002Fp>\n                    \u003Cp class=\"text-sm font-bold\">Замовлення\u003C\u002Fp>\n                    \u003Cp class=\"text-xs opacity-70\">Hover для деталей\u003C\u002Fp>\n                \u003C\u002Fdiv>\n                \u003C!-- Back -->\n                \u003Cdiv class=\"absolute inset-0 rounded-2xl bg-gradient-to-br from-violet-600 to-fuchsia-600\n                            flex flex-col items-center justify-center text-white p-4\n                            [backface-visibility:hidden] [transform:rotateY(180deg)]\">\n                    \u003Cp class=\"text-xs font-bold mb-1\">Деталі замовлення\u003C\u002Fp>\n                    \u003Cp class=\"text-xs opacity-80\">ID: #4821\u003C\u002Fp>\n                    \u003Cp class=\"text-xs opacity-80\">Статус: В дорозі\u003C\u002Fp>\n                    \u003Cp class=\"text-xs opacity-80\">ETA: 2 дні\u003C\u002Fp>\n                \u003C\u002Fdiv>\n            \u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cp class=\"text-xs text-slate-500\">rotateY (горизонт.)\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Card Flip: вертикальний -->\n    \u003Cdiv class=\"flex flex-col items-center gap-2\">\n        \u003Cdiv class=\"[perspective:800px] group w-44 h-28 cursor-pointer\">\n            \u003Cdiv class=\"relative w-full h-full [transition:transform_0.6s_ease-in-out]\n                        [transform-style:preserve-3d] group-hover:[transform:rotateX(180deg)]\">\n                \u003C!-- Front -->\n                \u003Cdiv class=\"absolute inset-0 rounded-2xl bg-gradient-to-br from-emerald-500 to-teal-600\n                            flex flex-col items-center justify-center text-white\n                            [backface-visibility:hidden]\">\n                    \u003Cp class=\"text-2xl mb-1\">💳\u003C\u002Fp>\n                    \u003Cp class=\"text-sm font-bold\">Картка\u003C\u002Fp>\n                    \u003Cp class=\"text-xs opacity-70\">**** 4242\u003C\u002Fp>\n                \u003C\u002Fdiv>\n                \u003C!-- Back -->\n                \u003Cdiv class=\"absolute inset-0 rounded-2xl bg-gradient-to-br from-teal-600 to-cyan-700\n                            flex flex-col items-center justify-center text-white p-4\n                            [backface-visibility:hidden] [transform:rotateX(180deg)]\">\n                    \u003Cdiv class=\"w-full h-6 bg-black\u002F30 rounded mb-3\">\u003C\u002Fdiv>\n                    \u003Cp class=\"text-xs font-bold\">CVV: ***\u003C\u002Fp>\n                    \u003Cp class=\"text-xs opacity-70 mt-1\">Термін: 12\u002F28\u003C\u002Fp>\n                \u003C\u002Fdiv>\n            \u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cp class=\"text-xs text-slate-500\">rotateX (вертик.)\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Cube: 3D куб -->\n    \u003Cdiv class=\"flex flex-col items-center gap-2\">\n        \u003Cdiv class=\"[perspective:400px] w-20 h-20 cursor-pointer group\">\n            \u003Cdiv class=\"relative w-full h-full [transform-style:preserve-3d]\n                        [transition:transform_1s_ease-in-out]\n                        group-hover:[transform:rotateY(90deg)_rotateX(20deg)]\">\n                \u003C!-- Верхня грань -->\n                \u003Cdiv class=\"absolute inset-0 [transform:rotateX(90deg)_translateZ(40px)]\n                            bg-indigo-400\u002F80 rounded-sm border border-indigo-300\u002F50\n                            flex items-center justify-center text-white text-xs font-bold\">\n                    Верх\n                \u003C\u002Fdiv>\n                \u003C!-- Передня грань -->\n                \u003Cdiv class=\"absolute inset-0 [transform:translateZ(40px)]\n                            bg-indigo-600 rounded-sm border border-indigo-500\n                            flex items-center justify-center text-white font-black text-lg\">\n                    Tw\n                \u003C\u002Fdiv>\n                \u003C!-- Права грань -->\n                \u003Cdiv class=\"absolute inset-0 [transform:rotateY(90deg)_translateZ(40px)]\n                            bg-violet-600\u002F80 rounded-sm border border-violet-500\u002F50\n                            flex items-center justify-center text-white text-xs font-bold\">\n                    v4\n                \u003C\u002Fdiv>\n            \u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cp class=\"text-xs text-slate-500\">3D Cube\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Rotate X: нахил до глядача -->\n    \u003Cdiv class=\"flex flex-col items-center gap-2\">\n        \u003Cdiv class=\"[perspective:600px] cursor-pointer group\">\n            \u003Cdiv class=\"w-44 h-28 rounded-2xl bg-gradient-to-br from-rose-500 to-orange-500\n                        flex items-center justify-center text-white font-bold\n                        [transition:transform_0.4s_ease-out]\n                        group-hover:[transform:rotateX(-15deg)]\n                        shadow-lg group-hover:shadow-2xl group-hover:shadow-rose-500\u002F40\">\n                \u003Cp class=\"text-sm\">Нахил до глядача\u003C\u002Fp>\n            \u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cp class=\"text-xs text-slate-500\">rotateX hover tilt\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[3392,14521,14522,14532,14546,14554,14568,14587,14595,14608,14620,14624,14639,14644,14652,14656,14661,14676,14691,14704,14711,14716,14729,14734,14741,14765,14789,14813,14821,14826,14839,14844,14851,14875,14899,14922,14945,14953,14961,14969,14993,15001,15005,15010,15024,15038,15050,15057,15061,15074,15078,15084,15107,15129,15152,15160,15164,15177,15181,15188,15207,15231,15255,15263,15271,15279,15302,15310,15314,15319,15333,15348,15361,15366,15373,15378,15391,15396,15403,15408,15416,15421,15434,15439,15446,15451,15459,15464,15477,15482,15488,15493,15501,15509,15517,15540,15548,15552,15557,15571,15586,15599,15604,15609,15614,15621,15645,15653,15661,15684,15692,15696,15704],{"__ignoreMap":3438},[3599,14523,14524,14526,14528,14530],{"class":3601,"line":3602},[3599,14525,7421],{"class":3755},[3599,14527,7424],{"class":3759},[3599,14529,7427],{"class":3623},[3599,14531,3773],{"class":3755},[3599,14533,14534,14536,14538,14540,14542,14544],{"class":3601,"line":3609},[3599,14535,3756],{"class":3755},[3599,14537,3743],{"class":3759},[3599,14539,7438],{"class":3623},[3599,14541,3766],{"class":3616},[3599,14543,7443],{"class":3769},[3599,14545,3773],{"class":3755},[3599,14547,14548,14550,14552],{"class":3601,"line":3620},[3599,14549,3756],{"class":3755},[3599,14551,7452],{"class":3759},[3599,14553,3773],{"class":3755},[3599,14555,14556,14558,14560,14562,14564,14566],{"class":3601,"line":3637},[3599,14557,4363],{"class":3755},[3599,14559,7461],{"class":3759},[3599,14561,7464],{"class":3623},[3599,14563,3766],{"class":3616},[3599,14565,7469],{"class":3769},[3599,14567,3773],{"class":3755},[3599,14569,14570,14572,14574,14576,14578,14581,14583,14585],{"class":3601,"line":3654},[3599,14571,4363],{"class":3755},[3599,14573,7478],{"class":3759},[3599,14575,7481],{"class":3623},[3599,14577,3766],{"class":7484},[3599,14579,14580],{"class":3769},"\"https:\u002F\u002Fcdn.tailwindcss.com\u002F4.0\"",[3599,14582,7122],{"class":3755},[3599,14584,7478],{"class":3759},[3599,14586,3773],{"class":3755},[3599,14588,14589,14591,14593],{"class":3601,"line":3660},[3599,14590,4389],{"class":3755},[3599,14592,7452],{"class":3759},[3599,14594,3773],{"class":3755},[3599,14596,14597,14599,14601,14603,14605],{"class":3601,"line":3666},[3599,14598,3756],{"class":3755},[3599,14600,7533],{"class":3759},[3599,14602,3763],{"class":3623},[3599,14604,3766],{"class":3616},[3599,14606,14607],{"class":3769},"\"bg-slate-100 p-8 flex flex-wrap gap-8 justify-center items-start\"\n",[3599,14609,14610,14613,14615,14618],{"class":3601,"line":3703},[3599,14611,14612],{"class":3623},"      style",[3599,14614,3766],{"class":3616},[3599,14616,14617],{"class":3769},"\"font-family: system-ui, sans-serif; min-height: 100vh;\"",[3599,14619,3773],{"class":3755},[3599,14621,14622],{"class":3601,"line":3717},[3599,14623,3779],{"emptyLinePlaceholder":3778},[3599,14625,14626,14628,14630,14632,14634,14637],{"class":3601,"line":3832},[3599,14627,4363],{"class":3755},[3599,14629,3353],{"class":3759},[3599,14631,3763],{"class":3623},[3599,14633,3766],{"class":3616},[3599,14635,14636],{"class":3769},"\"w-full text-center text-xs font-bold uppercase tracking-widest text-slate-400 mb-2\"",[3599,14638,3773],{"class":3755},[3599,14640,14641],{"class":3601,"line":3838},[3599,14642,14643],{"class":3616},"        Наведіть курсор для 3D-перевороту\n",[3599,14645,14646,14648,14650],{"class":3601,"line":3843},[3599,14647,4652],{"class":3755},[3599,14649,3353],{"class":3759},[3599,14651,3773],{"class":3755},[3599,14653,14654],{"class":3601,"line":3849},[3599,14655,3779],{"emptyLinePlaceholder":3778},[3599,14657,14658],{"class":3601,"line":3865},[3599,14659,14660],{"class":3605},"    \u003C!-- Card Flip: горизонтальний -->\n",[3599,14662,14663,14665,14667,14669,14671,14674],{"class":3601,"line":3870},[3599,14664,4363],{"class":3755},[3599,14666,3820],{"class":3759},[3599,14668,3763],{"class":3623},[3599,14670,3766],{"class":3616},[3599,14672,14673],{"class":3769},"\"flex flex-col items-center gap-2\"",[3599,14675,3773],{"class":3755},[3599,14677,14678,14680,14682,14684,14686,14689],{"class":3601,"line":3876},[3599,14679,4372],{"class":3755},[3599,14681,3820],{"class":3759},[3599,14683,3763],{"class":3623},[3599,14685,3766],{"class":3616},[3599,14687,14688],{"class":3769},"\"[perspective:800px] group w-44 h-28 cursor-pointer\"",[3599,14690,3773],{"class":3755},[3599,14692,14693,14695,14697,14699,14701],{"class":3601,"line":3892},[3599,14694,4422],{"class":3755},[3599,14696,3820],{"class":3759},[3599,14698,3763],{"class":3623},[3599,14700,3766],{"class":3616},[3599,14702,14703],{"class":3769},"\"relative w-full h-full [transition:transform_0.6s_ease-in-out]\n",[3599,14705,14706,14709],{"class":3601,"line":3897},[3599,14707,14708],{"class":3769},"                        [transform-style:preserve-3d] group-hover:[transform:rotateY(180deg)]\"",[3599,14710,3773],{"class":3755},[3599,14712,14713],{"class":3601,"line":3903},[3599,14714,14715],{"class":3605},"                \u003C!-- Front -->\n",[3599,14717,14718,14720,14722,14724,14726],{"class":3601,"line":3919},[3599,14719,4761],{"class":3755},[3599,14721,3820],{"class":3759},[3599,14723,3763],{"class":3623},[3599,14725,3766],{"class":3616},[3599,14727,14728],{"class":3769},"\"absolute inset-0 rounded-2xl bg-gradient-to-br from-indigo-500 to-violet-600\n",[3599,14730,14731],{"class":3601,"line":3924},[3599,14732,14733],{"class":3769},"                            flex flex-col items-center justify-center text-white\n",[3599,14735,14736,14739],{"class":3601,"line":3930},[3599,14737,14738],{"class":3769},"                            [backface-visibility:hidden]\"",[3599,14740,3773],{"class":3755},[3599,14742,14743,14745,14747,14749,14751,14754,14756,14759,14761,14763],{"class":3601,"line":4516},[3599,14744,7653],{"class":3755},[3599,14746,3353],{"class":3759},[3599,14748,3763],{"class":3623},[3599,14750,3766],{"class":3616},[3599,14752,14753],{"class":3769},"\"text-2xl mb-1\"",[3599,14755,4003],{"class":3755},[3599,14757,14758],{"class":3616},"📦",[3599,14760,4389],{"class":3755},[3599,14762,3353],{"class":3759},[3599,14764,3773],{"class":3755},[3599,14766,14767,14769,14771,14773,14775,14778,14780,14783,14785,14787],{"class":3601,"line":4521},[3599,14768,7653],{"class":3755},[3599,14770,3353],{"class":3759},[3599,14772,3763],{"class":3623},[3599,14774,3766],{"class":3616},[3599,14776,14777],{"class":3769},"\"text-sm font-bold\"",[3599,14779,4003],{"class":3755},[3599,14781,14782],{"class":3616},"Замовлення",[3599,14784,4389],{"class":3755},[3599,14786,3353],{"class":3759},[3599,14788,3773],{"class":3755},[3599,14790,14791,14793,14795,14797,14799,14802,14804,14807,14809,14811],{"class":3601,"line":4527},[3599,14792,7653],{"class":3755},[3599,14794,3353],{"class":3759},[3599,14796,3763],{"class":3623},[3599,14798,3766],{"class":3616},[3599,14800,14801],{"class":3769},"\"text-xs opacity-70\"",[3599,14803,4003],{"class":3755},[3599,14805,14806],{"class":3616},"Hover для деталей",[3599,14808,4389],{"class":3755},[3599,14810,3353],{"class":3759},[3599,14812,3773],{"class":3755},[3599,14814,14815,14817,14819],{"class":3601,"line":4541},[3599,14816,4790],{"class":3755},[3599,14818,3820],{"class":3759},[3599,14820,3773],{"class":3755},[3599,14822,14823],{"class":3601,"line":4547},[3599,14824,14825],{"class":3605},"                \u003C!-- Back -->\n",[3599,14827,14828,14830,14832,14834,14836],{"class":3601,"line":4553},[3599,14829,4761],{"class":3755},[3599,14831,3820],{"class":3759},[3599,14833,3763],{"class":3623},[3599,14835,3766],{"class":3616},[3599,14837,14838],{"class":3769},"\"absolute inset-0 rounded-2xl bg-gradient-to-br from-violet-600 to-fuchsia-600\n",[3599,14840,14841],{"class":3601,"line":4561},[3599,14842,14843],{"class":3769},"                            flex flex-col items-center justify-center text-white p-4\n",[3599,14845,14846,14849],{"class":3601,"line":4567},[3599,14847,14848],{"class":3769},"                            [backface-visibility:hidden] [transform:rotateY(180deg)]\"",[3599,14850,3773],{"class":3755},[3599,14852,14853,14855,14857,14859,14861,14864,14866,14869,14871,14873],{"class":3601,"line":4576},[3599,14854,7653],{"class":3755},[3599,14856,3353],{"class":3759},[3599,14858,3763],{"class":3623},[3599,14860,3766],{"class":3616},[3599,14862,14863],{"class":3769},"\"text-xs font-bold mb-1\"",[3599,14865,4003],{"class":3755},[3599,14867,14868],{"class":3616},"Деталі замовлення",[3599,14870,4389],{"class":3755},[3599,14872,3353],{"class":3759},[3599,14874,3773],{"class":3755},[3599,14876,14877,14879,14881,14883,14885,14888,14890,14893,14895,14897],{"class":3601,"line":4581},[3599,14878,7653],{"class":3755},[3599,14880,3353],{"class":3759},[3599,14882,3763],{"class":3623},[3599,14884,3766],{"class":3616},[3599,14886,14887],{"class":3769},"\"text-xs opacity-80\"",[3599,14889,4003],{"class":3755},[3599,14891,14892],{"class":3616},"ID: #4821",[3599,14894,4389],{"class":3755},[3599,14896,3353],{"class":3759},[3599,14898,3773],{"class":3755},[3599,14900,14901,14903,14905,14907,14909,14911,14913,14916,14918,14920],{"class":3601,"line":4587},[3599,14902,7653],{"class":3755},[3599,14904,3353],{"class":3759},[3599,14906,3763],{"class":3623},[3599,14908,3766],{"class":3616},[3599,14910,14887],{"class":3769},[3599,14912,4003],{"class":3755},[3599,14914,14915],{"class":3616},"Статус: В дорозі",[3599,14917,4389],{"class":3755},[3599,14919,3353],{"class":3759},[3599,14921,3773],{"class":3755},[3599,14923,14924,14926,14928,14930,14932,14934,14936,14939,14941,14943],{"class":3601,"line":4601},[3599,14925,7653],{"class":3755},[3599,14927,3353],{"class":3759},[3599,14929,3763],{"class":3623},[3599,14931,3766],{"class":3616},[3599,14933,14887],{"class":3769},[3599,14935,4003],{"class":3755},[3599,14937,14938],{"class":3616},"ETA: 2 дні",[3599,14940,4389],{"class":3755},[3599,14942,3353],{"class":3759},[3599,14944,3773],{"class":3755},[3599,14946,14947,14949,14951],{"class":3601,"line":4606},[3599,14948,4790],{"class":3755},[3599,14950,3820],{"class":3759},[3599,14952,3773],{"class":3755},[3599,14954,14955,14957,14959],{"class":3601,"line":4612},[3599,14956,4458],{"class":3755},[3599,14958,3820],{"class":3759},[3599,14960,3773],{"class":3755},[3599,14962,14963,14965,14967],{"class":3601,"line":4619},[3599,14964,4642],{"class":3755},[3599,14966,3820],{"class":3759},[3599,14968,3773],{"class":3755},[3599,14970,14971,14973,14975,14977,14979,14982,14984,14987,14989,14991],{"class":3601,"line":4625},[3599,14972,4372],{"class":3755},[3599,14974,3353],{"class":3759},[3599,14976,3763],{"class":3623},[3599,14978,3766],{"class":3616},[3599,14980,14981],{"class":3769},"\"text-xs text-slate-500\"",[3599,14983,4003],{"class":3755},[3599,14985,14986],{"class":3616},"rotateY (горизонт.)",[3599,14988,4389],{"class":3755},[3599,14990,3353],{"class":3759},[3599,14992,3773],{"class":3755},[3599,14994,14995,14997,14999],{"class":3601,"line":4634},[3599,14996,4652],{"class":3755},[3599,14998,3820],{"class":3759},[3599,15000,3773],{"class":3755},[3599,15002,15003],{"class":3601,"line":4639},[3599,15004,3779],{"emptyLinePlaceholder":3778},[3599,15006,15007],{"class":3601,"line":4649},[3599,15008,15009],{"class":3605},"    \u003C!-- Card Flip: вертикальний -->\n",[3599,15011,15012,15014,15016,15018,15020,15022],{"class":3601,"line":4659},[3599,15013,4363],{"class":3755},[3599,15015,3820],{"class":3759},[3599,15017,3763],{"class":3623},[3599,15019,3766],{"class":3616},[3599,15021,14673],{"class":3769},[3599,15023,3773],{"class":3755},[3599,15025,15026,15028,15030,15032,15034,15036],{"class":3601,"line":4664},[3599,15027,4372],{"class":3755},[3599,15029,3820],{"class":3759},[3599,15031,3763],{"class":3623},[3599,15033,3766],{"class":3616},[3599,15035,14688],{"class":3769},[3599,15037,3773],{"class":3755},[3599,15039,15040,15042,15044,15046,15048],{"class":3601,"line":4670},[3599,15041,4422],{"class":3755},[3599,15043,3820],{"class":3759},[3599,15045,3763],{"class":3623},[3599,15047,3766],{"class":3616},[3599,15049,14703],{"class":3769},[3599,15051,15052,15055],{"class":3601,"line":4679},[3599,15053,15054],{"class":3769},"                        [transform-style:preserve-3d] group-hover:[transform:rotateX(180deg)]\"",[3599,15056,3773],{"class":3755},[3599,15058,15059],{"class":3601,"line":4703},[3599,15060,14715],{"class":3605},[3599,15062,15063,15065,15067,15069,15071],{"class":3601,"line":4719},[3599,15064,4761],{"class":3755},[3599,15066,3820],{"class":3759},[3599,15068,3763],{"class":3623},[3599,15070,3766],{"class":3616},[3599,15072,15073],{"class":3769},"\"absolute inset-0 rounded-2xl bg-gradient-to-br from-emerald-500 to-teal-600\n",[3599,15075,15076],{"class":3601,"line":4724},[3599,15077,14733],{"class":3769},[3599,15079,15080,15082],{"class":3601,"line":4738},[3599,15081,14738],{"class":3769},[3599,15083,3773],{"class":3755},[3599,15085,15086,15088,15090,15092,15094,15096,15098,15101,15103,15105],{"class":3601,"line":4744},[3599,15087,7653],{"class":3755},[3599,15089,3353],{"class":3759},[3599,15091,3763],{"class":3623},[3599,15093,3766],{"class":3616},[3599,15095,14753],{"class":3769},[3599,15097,4003],{"class":3755},[3599,15099,15100],{"class":3616},"💳",[3599,15102,4389],{"class":3755},[3599,15104,3353],{"class":3759},[3599,15106,3773],{"class":3755},[3599,15108,15109,15111,15113,15115,15117,15119,15121,15123,15125,15127],{"class":3601,"line":4750},[3599,15110,7653],{"class":3755},[3599,15112,3353],{"class":3759},[3599,15114,3763],{"class":3623},[3599,15116,3766],{"class":3616},[3599,15118,14777],{"class":3769},[3599,15120,4003],{"class":3755},[3599,15122,14104],{"class":3616},[3599,15124,4389],{"class":3755},[3599,15126,3353],{"class":3759},[3599,15128,3773],{"class":3755},[3599,15130,15131,15133,15135,15137,15139,15141,15143,15146,15148,15150],{"class":3601,"line":4758},[3599,15132,7653],{"class":3755},[3599,15134,3353],{"class":3759},[3599,15136,3763],{"class":3623},[3599,15138,3766],{"class":3616},[3599,15140,14801],{"class":3769},[3599,15142,4003],{"class":3755},[3599,15144,15145],{"class":3616},"**** 4242",[3599,15147,4389],{"class":3755},[3599,15149,3353],{"class":3759},[3599,15151,3773],{"class":3755},[3599,15153,15154,15156,15158],{"class":3601,"line":4773},[3599,15155,4790],{"class":3755},[3599,15157,3820],{"class":3759},[3599,15159,3773],{"class":3755},[3599,15161,15162],{"class":3601,"line":4781},[3599,15163,14825],{"class":3605},[3599,15165,15166,15168,15170,15172,15174],{"class":3601,"line":4787},[3599,15167,4761],{"class":3755},[3599,15169,3820],{"class":3759},[3599,15171,3763],{"class":3623},[3599,15173,3766],{"class":3616},[3599,15175,15176],{"class":3769},"\"absolute inset-0 rounded-2xl bg-gradient-to-br from-teal-600 to-cyan-700\n",[3599,15178,15179],{"class":3601,"line":4797},[3599,15180,14843],{"class":3769},[3599,15182,15183,15186],{"class":3601,"line":4822},[3599,15184,15185],{"class":3769},"                            [backface-visibility:hidden] [transform:rotateX(180deg)]\"",[3599,15187,3773],{"class":3755},[3599,15189,15190,15192,15194,15196,15198,15201,15203,15205],{"class":3601,"line":4847},[3599,15191,7653],{"class":3755},[3599,15193,3820],{"class":3759},[3599,15195,3763],{"class":3623},[3599,15197,3766],{"class":3616},[3599,15199,15200],{"class":3769},"\"w-full h-6 bg-black\u002F30 rounded mb-3\"",[3599,15202,7122],{"class":3755},[3599,15204,3820],{"class":3759},[3599,15206,3773],{"class":3755},[3599,15208,15209,15211,15213,15215,15217,15220,15222,15225,15227,15229],{"class":3601,"line":4856},[3599,15210,7653],{"class":3755},[3599,15212,3353],{"class":3759},[3599,15214,3763],{"class":3623},[3599,15216,3766],{"class":3616},[3599,15218,15219],{"class":3769},"\"text-xs font-bold\"",[3599,15221,4003],{"class":3755},[3599,15223,15224],{"class":3616},"CVV: ***",[3599,15226,4389],{"class":3755},[3599,15228,3353],{"class":3759},[3599,15230,3773],{"class":3755},[3599,15232,15233,15235,15237,15239,15241,15244,15246,15249,15251,15253],{"class":3601,"line":4861},[3599,15234,7653],{"class":3755},[3599,15236,3353],{"class":3759},[3599,15238,3763],{"class":3623},[3599,15240,3766],{"class":3616},[3599,15242,15243],{"class":3769},"\"text-xs opacity-70 mt-1\"",[3599,15245,4003],{"class":3755},[3599,15247,15248],{"class":3616},"Термін: 12\u002F28",[3599,15250,4389],{"class":3755},[3599,15252,3353],{"class":3759},[3599,15254,3773],{"class":3755},[3599,15256,15257,15259,15261],{"class":3601,"line":4875},[3599,15258,4790],{"class":3755},[3599,15260,3820],{"class":3759},[3599,15262,3773],{"class":3755},[3599,15264,15265,15267,15269],{"class":3601,"line":4881},[3599,15266,4458],{"class":3755},[3599,15268,3820],{"class":3759},[3599,15270,3773],{"class":3755},[3599,15272,15273,15275,15277],{"class":3601,"line":4887},[3599,15274,4642],{"class":3755},[3599,15276,3820],{"class":3759},[3599,15278,3773],{"class":3755},[3599,15280,15281,15283,15285,15287,15289,15291,15293,15296,15298,15300],{"class":3601,"line":4895},[3599,15282,4372],{"class":3755},[3599,15284,3353],{"class":3759},[3599,15286,3763],{"class":3623},[3599,15288,3766],{"class":3616},[3599,15290,14981],{"class":3769},[3599,15292,4003],{"class":3755},[3599,15294,15295],{"class":3616},"rotateX (вертик.)",[3599,15297,4389],{"class":3755},[3599,15299,3353],{"class":3759},[3599,15301,3773],{"class":3755},[3599,15303,15304,15306,15308],{"class":3601,"line":4911},[3599,15305,4652],{"class":3755},[3599,15307,3820],{"class":3759},[3599,15309,3773],{"class":3755},[3599,15311,15312],{"class":3601,"line":4917},[3599,15313,3779],{"emptyLinePlaceholder":3778},[3599,15315,15316],{"class":3601,"line":4926},[3599,15317,15318],{"class":3605},"    \u003C!-- Cube: 3D куб -->\n",[3599,15320,15321,15323,15325,15327,15329,15331],{"class":3601,"line":4950},[3599,15322,4363],{"class":3755},[3599,15324,3820],{"class":3759},[3599,15326,3763],{"class":3623},[3599,15328,3766],{"class":3616},[3599,15330,14673],{"class":3769},[3599,15332,3773],{"class":3755},[3599,15334,15335,15337,15339,15341,15343,15346],{"class":3601,"line":4974},[3599,15336,4372],{"class":3755},[3599,15338,3820],{"class":3759},[3599,15340,3763],{"class":3623},[3599,15342,3766],{"class":3616},[3599,15344,15345],{"class":3769},"\"[perspective:400px] w-20 h-20 cursor-pointer group\"",[3599,15347,3773],{"class":3755},[3599,15349,15350,15352,15354,15356,15358],{"class":3601,"line":4983},[3599,15351,4422],{"class":3755},[3599,15353,3820],{"class":3759},[3599,15355,3763],{"class":3623},[3599,15357,3766],{"class":3616},[3599,15359,15360],{"class":3769},"\"relative w-full h-full [transform-style:preserve-3d]\n",[3599,15362,15363],{"class":3601,"line":4988},[3599,15364,15365],{"class":3769},"                        [transition:transform_1s_ease-in-out]\n",[3599,15367,15368,15371],{"class":3601,"line":5002},[3599,15369,15370],{"class":3769},"                        group-hover:[transform:rotateY(90deg)_rotateX(20deg)]\"",[3599,15372,3773],{"class":3755},[3599,15374,15375],{"class":3601,"line":5007},[3599,15376,15377],{"class":3605},"                \u003C!-- Верхня грань -->\n",[3599,15379,15380,15382,15384,15386,15388],{"class":3601,"line":5013},[3599,15381,4761],{"class":3755},[3599,15383,3820],{"class":3759},[3599,15385,3763],{"class":3623},[3599,15387,3766],{"class":3616},[3599,15389,15390],{"class":3769},"\"absolute inset-0 [transform:rotateX(90deg)_translateZ(40px)]\n",[3599,15392,15393],{"class":3601,"line":5020},[3599,15394,15395],{"class":3769},"                            bg-indigo-400\u002F80 rounded-sm border border-indigo-300\u002F50\n",[3599,15397,15398,15401],{"class":3601,"line":5036},[3599,15399,15400],{"class":3769},"                            flex items-center justify-center text-white text-xs font-bold\"",[3599,15402,3773],{"class":3755},[3599,15404,15405],{"class":3601,"line":5042},[3599,15406,15407],{"class":3616},"                    Верх\n",[3599,15409,15410,15412,15414],{"class":3601,"line":5051},[3599,15411,4790],{"class":3755},[3599,15413,3820],{"class":3759},[3599,15415,3773],{"class":3755},[3599,15417,15418],{"class":3601,"line":5075},[3599,15419,15420],{"class":3605},"                \u003C!-- Передня грань -->\n",[3599,15422,15423,15425,15427,15429,15431],{"class":3601,"line":5099},[3599,15424,4761],{"class":3755},[3599,15426,3820],{"class":3759},[3599,15428,3763],{"class":3623},[3599,15430,3766],{"class":3616},[3599,15432,15433],{"class":3769},"\"absolute inset-0 [transform:translateZ(40px)]\n",[3599,15435,15436],{"class":3601,"line":5108},[3599,15437,15438],{"class":3769},"                            bg-indigo-600 rounded-sm border border-indigo-500\n",[3599,15440,15441,15444],{"class":3601,"line":5113},[3599,15442,15443],{"class":3769},"                            flex items-center justify-center text-white font-black text-lg\"",[3599,15445,3773],{"class":3755},[3599,15447,15448],{"class":3601,"line":5122},[3599,15449,15450],{"class":3616},"                    Tw\n",[3599,15452,15453,15455,15457],{"class":3601,"line":5131},[3599,15454,4790],{"class":3755},[3599,15456,3820],{"class":3759},[3599,15458,3773],{"class":3755},[3599,15460,15461],{"class":3601,"line":5136},[3599,15462,15463],{"class":3605},"                \u003C!-- Права грань -->\n",[3599,15465,15466,15468,15470,15472,15474],{"class":3601,"line":5142},[3599,15467,4761],{"class":3755},[3599,15469,3820],{"class":3759},[3599,15471,3763],{"class":3623},[3599,15473,3766],{"class":3616},[3599,15475,15476],{"class":3769},"\"absolute inset-0 [transform:rotateY(90deg)_translateZ(40px)]\n",[3599,15478,15479],{"class":3601,"line":5151},[3599,15480,15481],{"class":3769},"                            bg-violet-600\u002F80 rounded-sm border border-violet-500\u002F50\n",[3599,15483,15484,15486],{"class":3601,"line":5175},[3599,15485,15400],{"class":3769},[3599,15487,3773],{"class":3755},[3599,15489,15490],{"class":3601,"line":5191},[3599,15491,15492],{"class":3616},"                    v4\n",[3599,15494,15495,15497,15499],{"class":3601,"line":5215},[3599,15496,4790],{"class":3755},[3599,15498,3820],{"class":3759},[3599,15500,3773],{"class":3755},[3599,15502,15503,15505,15507],{"class":3601,"line":5226},[3599,15504,4458],{"class":3755},[3599,15506,3820],{"class":3759},[3599,15508,3773],{"class":3755},[3599,15510,15511,15513,15515],{"class":3601,"line":5232},[3599,15512,4642],{"class":3755},[3599,15514,3820],{"class":3759},[3599,15516,3773],{"class":3755},[3599,15518,15519,15521,15523,15525,15527,15529,15531,15534,15536,15538],{"class":3601,"line":5238},[3599,15520,4372],{"class":3755},[3599,15522,3353],{"class":3759},[3599,15524,3763],{"class":3623},[3599,15526,3766],{"class":3616},[3599,15528,14981],{"class":3769},[3599,15530,4003],{"class":3755},[3599,15532,15533],{"class":3616},"3D Cube",[3599,15535,4389],{"class":3755},[3599,15537,3353],{"class":3759},[3599,15539,3773],{"class":3755},[3599,15541,15542,15544,15546],{"class":3601,"line":5246},[3599,15543,4652],{"class":3755},[3599,15545,3820],{"class":3759},[3599,15547,3773],{"class":3755},[3599,15549,15550],{"class":3601,"line":5251},[3599,15551,3779],{"emptyLinePlaceholder":3778},[3599,15553,15554],{"class":3601,"line":5271},[3599,15555,15556],{"class":3605},"    \u003C!-- Rotate X: нахил до глядача -->\n",[3599,15558,15559,15561,15563,15565,15567,15569],{"class":3601,"line":5280},[3599,15560,4363],{"class":3755},[3599,15562,3820],{"class":3759},[3599,15564,3763],{"class":3623},[3599,15566,3766],{"class":3616},[3599,15568,14673],{"class":3769},[3599,15570,3773],{"class":3755},[3599,15572,15573,15575,15577,15579,15581,15584],{"class":3601,"line":5286},[3599,15574,4372],{"class":3755},[3599,15576,3820],{"class":3759},[3599,15578,3763],{"class":3623},[3599,15580,3766],{"class":3616},[3599,15582,15583],{"class":3769},"\"[perspective:600px] cursor-pointer group\"",[3599,15585,3773],{"class":3755},[3599,15587,15588,15590,15592,15594,15596],{"class":3601,"line":5292},[3599,15589,4422],{"class":3755},[3599,15591,3820],{"class":3759},[3599,15593,3763],{"class":3623},[3599,15595,3766],{"class":3616},[3599,15597,15598],{"class":3769},"\"w-44 h-28 rounded-2xl bg-gradient-to-br from-rose-500 to-orange-500\n",[3599,15600,15601],{"class":3601,"line":5299},[3599,15602,15603],{"class":3769},"                        flex items-center justify-center text-white font-bold\n",[3599,15605,15606],{"class":3601,"line":5308},[3599,15607,15608],{"class":3769},"                        [transition:transform_0.4s_ease-out]\n",[3599,15610,15611],{"class":3601,"line":5317},[3599,15612,15613],{"class":3769},"                        group-hover:[transform:rotateX(-15deg)]\n",[3599,15615,15616,15619],{"class":3601,"line":5322},[3599,15617,15618],{"class":3769},"                        shadow-lg group-hover:shadow-2xl group-hover:shadow-rose-500\u002F40\"",[3599,15620,3773],{"class":3755},[3599,15622,15623,15625,15627,15629,15631,15634,15636,15639,15641,15643],{"class":3601,"line":9133},[3599,15624,4761],{"class":3755},[3599,15626,3353],{"class":3759},[3599,15628,3763],{"class":3623},[3599,15630,3766],{"class":3616},[3599,15632,15633],{"class":3769},"\"text-sm\"",[3599,15635,4003],{"class":3755},[3599,15637,15638],{"class":3616},"Нахил до глядача",[3599,15640,4389],{"class":3755},[3599,15642,3353],{"class":3759},[3599,15644,3773],{"class":3755},[3599,15646,15647,15649,15651],{"class":3601,"line":9139},[3599,15648,4458],{"class":3755},[3599,15650,3820],{"class":3759},[3599,15652,3773],{"class":3755},[3599,15654,15655,15657,15659],{"class":3601,"line":9180},[3599,15656,4642],{"class":3755},[3599,15658,3820],{"class":3759},[3599,15660,3773],{"class":3755},[3599,15662,15663,15665,15667,15669,15671,15673,15675,15678,15680,15682],{"class":3601,"line":9210},[3599,15664,4372],{"class":3755},[3599,15666,3353],{"class":3759},[3599,15668,3763],{"class":3623},[3599,15670,3766],{"class":3616},[3599,15672,14981],{"class":3769},[3599,15674,4003],{"class":3755},[3599,15676,15677],{"class":3616},"rotateX hover tilt",[3599,15679,4389],{"class":3755},[3599,15681,3353],{"class":3759},[3599,15683,3773],{"class":3755},[3599,15685,15686,15688,15690],{"class":3601,"line":9239},[3599,15687,4652],{"class":3755},[3599,15689,3820],{"class":3759},[3599,15691,3773],{"class":3755},[3599,15693,15694],{"class":3601,"line":9267},[3599,15695,3779],{"emptyLinePlaceholder":3778},[3599,15697,15698,15700,15702],{"class":3601,"line":9295},[3599,15699,4389],{"class":3755},[3599,15701,7533],{"class":3759},[3599,15703,3773],{"class":3755},[3599,15705,15706,15708,15710],{"class":3601,"line":9300},[3599,15707,4389],{"class":3755},[3599,15709,3743],{"class":3759},[3599,15711,3773],{"class":3755},[3409,15713],{},[3416,15715,15717],{"id":15716},"_44-паралакс-і-тилт-ефект-через-javascript","4.4. Паралакс і тилт-ефект через JavaScript",[3353,15719,15720],{},"Тилт-ефект (картка нахиляється за курсором) поєднує 3D-трансформації з JavaScript:",[3430,15722,15724],{"className":3741,"code":15723,"language":3743,"meta":3438,"style":3438},"\u003C!-- Картка з тилт-ефектом -->\n\u003Cdiv id=\"tilt-card\"\n     class=\"[perspective:600px] w-64 h-40 cursor-pointer\"\n     onmousemove=\"handleTilt(event, this)\"\n     onmouseleave=\"resetTilt(this)\">\n    \u003Cdiv id=\"tilt-inner\"\n         class=\"w-full h-full rounded-2xl bg-gradient-to-br from-indigo-600 to-violet-700\n                text-white flex items-center justify-center font-bold text-xl\n                shadow-xl [transform-style:preserve-3d]\n                transition-transform duration-100\">\n        \u003Cspan class=\"[transform:translateZ(30px)]\">Tailwind v4\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003Cscript>\nfunction handleTilt(e, container) {\n    const inner = container.querySelector('#tilt-inner') ?? container.firstElementChild\n    const rect = container.getBoundingClientRect()\n    const x = (e.clientX - rect.left) \u002F rect.width  - 0.5   \u002F\u002F від -0.5 до 0.5\n    const y = (e.clientY - rect.top)  \u002F rect.height - 0.5\n\n    const rotateX = (-y * 20).toFixed(1) \u002F\u002F від -10 до 10 deg\n    const rotateY = ( x * 20).toFixed(1)\n\n    inner.style.transform = `rotateX(${rotateX}deg) rotateY(${rotateY}deg)`\n}\n\nfunction resetTilt(container) {\n    const inner = container.querySelector('#tilt-inner') ?? container.firstElementChild\n    inner.style.transform = 'rotateX(0deg) rotateY(0deg)'\n}\n\u003C\u002Fscript>\n",[3392,15725,15726,15731,15744,15754,15778,15798,15811,15821,15826,15831,15838,15862,15870,15878,15882,15890,15909,15944,15963,16011,16054,16058,16094,16123,16127,16165,16169,16173,16186,16214,16231,16235],{"__ignoreMap":3438},[3599,15727,15728],{"class":3601,"line":3602},[3599,15729,15730],{"class":3605},"\u003C!-- Картка з тилт-ефектом -->\n",[3599,15732,15733,15735,15737,15739,15741],{"class":3601,"line":3609},[3599,15734,3756],{"class":3755},[3599,15736,3820],{"class":3759},[3599,15738,7691],{"class":3623},[3599,15740,3766],{"class":3616},[3599,15742,15743],{"class":3769},"\"tilt-card\"\n",[3599,15745,15746,15749,15751],{"class":3601,"line":3620},[3599,15747,15748],{"class":3623},"     class",[3599,15750,3766],{"class":3616},[3599,15752,15753],{"class":3769},"\"[perspective:600px] w-64 h-40 cursor-pointer\"\n",[3599,15755,15756,15759,15761,15763,15766,15768,15771,15773,15775],{"class":3601,"line":3637},[3599,15757,15758],{"class":3623},"     onmousemove",[3599,15760,3766],{"class":3616},[3599,15762,7783],{"class":3769},[3599,15764,15765],{"class":3674},"handleTilt",[3599,15767,3678],{"class":3769},[3599,15769,15770],{"class":8976},"event",[3599,15772,3403],{"class":3769},[3599,15774,12507],{"class":8954},[3599,15776,15777],{"class":3769},")\"\n",[3599,15779,15780,15783,15785,15787,15790,15792,15794,15796],{"class":3601,"line":3654},[3599,15781,15782],{"class":3623},"     onmouseleave",[3599,15784,3766],{"class":3616},[3599,15786,7783],{"class":3769},[3599,15788,15789],{"class":3674},"resetTilt",[3599,15791,3678],{"class":3769},[3599,15793,12507],{"class":8954},[3599,15795,12525],{"class":3769},[3599,15797,3773],{"class":3755},[3599,15799,15800,15802,15804,15806,15808],{"class":3601,"line":3660},[3599,15801,4363],{"class":3755},[3599,15803,3820],{"class":3759},[3599,15805,7691],{"class":3623},[3599,15807,3766],{"class":3616},[3599,15809,15810],{"class":3769},"\"tilt-inner\"\n",[3599,15812,15813,15816,15818],{"class":3601,"line":3666},[3599,15814,15815],{"class":3623},"         class",[3599,15817,3766],{"class":3616},[3599,15819,15820],{"class":3769},"\"w-full h-full rounded-2xl bg-gradient-to-br from-indigo-600 to-violet-700\n",[3599,15822,15823],{"class":3601,"line":3703},[3599,15824,15825],{"class":3769},"                text-white flex items-center justify-center font-bold text-xl\n",[3599,15827,15828],{"class":3601,"line":3717},[3599,15829,15830],{"class":3769},"                shadow-xl [transform-style:preserve-3d]\n",[3599,15832,15833,15836],{"class":3601,"line":3832},[3599,15834,15835],{"class":3769},"                transition-transform duration-100\"",[3599,15837,3773],{"class":3755},[3599,15839,15840,15842,15844,15846,15848,15851,15853,15856,15858,15860],{"class":3601,"line":3838},[3599,15841,4372],{"class":3755},[3599,15843,3599],{"class":3759},[3599,15845,3763],{"class":3623},[3599,15847,3766],{"class":3616},[3599,15849,15850],{"class":3769},"\"[transform:translateZ(30px)]\"",[3599,15852,4003],{"class":3755},[3599,15854,15855],{"class":3616},"Tailwind v4",[3599,15857,4389],{"class":3755},[3599,15859,3599],{"class":3759},[3599,15861,3773],{"class":3755},[3599,15863,15864,15866,15868],{"class":3601,"line":3843},[3599,15865,4652],{"class":3755},[3599,15867,3820],{"class":3759},[3599,15869,3773],{"class":3755},[3599,15871,15872,15874,15876],{"class":3601,"line":3849},[3599,15873,4389],{"class":3755},[3599,15875,3820],{"class":3759},[3599,15877,3773],{"class":3755},[3599,15879,15880],{"class":3601,"line":3865},[3599,15881,3779],{"emptyLinePlaceholder":3778},[3599,15883,15884,15886,15888],{"class":3601,"line":3870},[3599,15885,3756],{"class":3755},[3599,15887,7478],{"class":3759},[3599,15889,3773],{"class":3755},[3599,15891,15892,15895,15898,15900,15902,15904,15907],{"class":3601,"line":3876},[3599,15893,15894],{"class":8954},"function",[3599,15896,15897],{"class":3674}," handleTilt",[3599,15899,3678],{"class":7484},[3599,15901,13710],{"class":8976},[3599,15903,3403],{"class":7484},[3599,15905,15906],{"class":8976},"container",[3599,15908,13474],{"class":7484},[3599,15910,15911,15914,15917,15919,15922,15924,15927,15929,15932,15934,15937,15939,15941],{"class":3601,"line":3892},[3599,15912,15913],{"class":8954},"    const",[3599,15915,15916],{"class":8969}," inner",[3599,15918,8973],{"class":3616},[3599,15920,15921],{"class":8976}," container",[3599,15923,8980],{"class":7484},[3599,15925,15926],{"class":3674},"querySelector",[3599,15928,3678],{"class":7484},[3599,15930,15931],{"class":8988},"'#tilt-inner'",[3599,15933,5537],{"class":7484},[3599,15935,15936],{"class":3616},"??",[3599,15938,15921],{"class":8976},[3599,15940,8980],{"class":7484},[3599,15942,15943],{"class":8976},"firstElementChild\n",[3599,15945,15946,15948,15951,15953,15955,15957,15960],{"class":3601,"line":3897},[3599,15947,15913],{"class":8954},[3599,15949,15950],{"class":8969}," rect",[3599,15952,8973],{"class":3616},[3599,15954,15921],{"class":8976},[3599,15956,8980],{"class":7484},[3599,15958,15959],{"class":3674},"getBoundingClientRect",[3599,15961,15962],{"class":7484},"()\n",[3599,15964,15965,15967,15970,15972,15974,15976,15978,15981,15984,15986,15988,15990,15992,15995,15997,15999,16002,16005,16008],{"class":3601,"line":3903},[3599,15966,15913],{"class":8954},[3599,15968,15969],{"class":8969}," x",[3599,15971,8973],{"class":3616},[3599,15973,3973],{"class":7484},[3599,15975,13710],{"class":8976},[3599,15977,8980],{"class":7484},[3599,15979,15980],{"class":8976},"clientX",[3599,15982,15983],{"class":3616}," -",[3599,15985,15950],{"class":8976},[3599,15987,8980],{"class":7484},[3599,15989,9492],{"class":8976},[3599,15991,5537],{"class":7484},[3599,15993,15994],{"class":3616},"\u002F",[3599,15996,15950],{"class":8976},[3599,15998,8980],{"class":7484},[3599,16000,16001],{"class":8976},"width",[3599,16003,16004],{"class":3616},"  -",[3599,16006,16007],{"class":3681}," 0.5",[3599,16009,16010],{"class":3605},"   \u002F\u002F від -0.5 до 0.5\n",[3599,16012,16013,16015,16018,16020,16022,16024,16026,16029,16031,16033,16035,16037,16040,16042,16044,16046,16049,16051],{"class":3601,"line":3919},[3599,16014,15913],{"class":8954},[3599,16016,16017],{"class":8969}," y",[3599,16019,8973],{"class":3616},[3599,16021,3973],{"class":7484},[3599,16023,13710],{"class":8976},[3599,16025,8980],{"class":7484},[3599,16027,16028],{"class":8976},"clientY",[3599,16030,15983],{"class":3616},[3599,16032,15950],{"class":8976},[3599,16034,8980],{"class":7484},[3599,16036,9511],{"class":8976},[3599,16038,16039],{"class":7484},")  ",[3599,16041,15994],{"class":3616},[3599,16043,15950],{"class":8976},[3599,16045,8980],{"class":7484},[3599,16047,16048],{"class":8976},"height",[3599,16050,15983],{"class":3616},[3599,16052,16053],{"class":3681}," 0.5\n",[3599,16055,16056],{"class":3601,"line":3924},[3599,16057,3779],{"emptyLinePlaceholder":3778},[3599,16059,16060,16062,16065,16067,16069,16072,16075,16078,16081,16083,16085,16087,16089,16091],{"class":3601,"line":3930},[3599,16061,15913],{"class":8954},[3599,16063,16064],{"class":8969}," rotateX",[3599,16066,8973],{"class":3616},[3599,16068,3973],{"class":7484},[3599,16070,16071],{"class":3616},"-",[3599,16073,16074],{"class":8976},"y",[3599,16076,16077],{"class":3616}," *",[3599,16079,16080],{"class":3681}," 20",[3599,16082,3961],{"class":7484},[3599,16084,9171],{"class":3674},[3599,16086,3678],{"class":7484},[3599,16088,3697],{"class":3681},[3599,16090,5537],{"class":7484},[3599,16092,16093],{"class":3605},"\u002F\u002F від -10 до 10 deg\n",[3599,16095,16096,16098,16101,16103,16106,16109,16111,16113,16115,16117,16119,16121],{"class":3601,"line":4516},[3599,16097,15913],{"class":8954},[3599,16099,16100],{"class":8969}," rotateY",[3599,16102,8973],{"class":3616},[3599,16104,16105],{"class":7484}," ( ",[3599,16107,16108],{"class":8976},"x",[3599,16110,16077],{"class":3616},[3599,16112,16080],{"class":3681},[3599,16114,3961],{"class":7484},[3599,16116,9171],{"class":3674},[3599,16118,3678],{"class":7484},[3599,16120,3697],{"class":3681},[3599,16122,5556],{"class":7484},[3599,16124,16125],{"class":3601,"line":4521},[3599,16126,3779],{"emptyLinePlaceholder":3778},[3599,16128,16129,16132,16134,16136,16138,16140,16142,16145,16147,16150,16152,16155,16157,16160,16162],{"class":3601,"line":4527},[3599,16130,16131],{"class":8976},"    inner",[3599,16133,8980],{"class":7484},[3599,16135,9366],{"class":8976},[3599,16137,8980],{"class":7484},[3599,16139,5479],{"class":8976},[3599,16141,8973],{"class":3616},[3599,16143,16144],{"class":8988}," `rotateX(",[3599,16146,9345],{"class":8954},[3599,16148,16149],{"class":8976},"rotateX",[3599,16151,9351],{"class":8954},[3599,16153,16154],{"class":8988},"deg) rotateY(",[3599,16156,9345],{"class":8954},[3599,16158,16159],{"class":8976},"rotateY",[3599,16161,9351],{"class":8954},[3599,16163,16164],{"class":8988},"deg)`\n",[3599,16166,16167],{"class":3601,"line":4541},[3599,16168,3720],{"class":7484},[3599,16170,16171],{"class":3601,"line":4547},[3599,16172,3779],{"emptyLinePlaceholder":3778},[3599,16174,16175,16177,16180,16182,16184],{"class":3601,"line":4553},[3599,16176,15894],{"class":8954},[3599,16178,16179],{"class":3674}," resetTilt",[3599,16181,3678],{"class":7484},[3599,16183,15906],{"class":8976},[3599,16185,13474],{"class":7484},[3599,16187,16188,16190,16192,16194,16196,16198,16200,16202,16204,16206,16208,16210,16212],{"class":3601,"line":4561},[3599,16189,15913],{"class":8954},[3599,16191,15916],{"class":8969},[3599,16193,8973],{"class":3616},[3599,16195,15921],{"class":8976},[3599,16197,8980],{"class":7484},[3599,16199,15926],{"class":3674},[3599,16201,3678],{"class":7484},[3599,16203,15931],{"class":8988},[3599,16205,5537],{"class":7484},[3599,16207,15936],{"class":3616},[3599,16209,15921],{"class":8976},[3599,16211,8980],{"class":7484},[3599,16213,15943],{"class":8976},[3599,16215,16216,16218,16220,16222,16224,16226,16228],{"class":3601,"line":4567},[3599,16217,16131],{"class":8976},[3599,16219,8980],{"class":7484},[3599,16221,9366],{"class":8976},[3599,16223,8980],{"class":7484},[3599,16225,5479],{"class":8976},[3599,16227,8973],{"class":3616},[3599,16229,16230],{"class":8988}," 'rotateX(0deg) rotateY(0deg)'\n",[3599,16232,16233],{"class":3601,"line":4576},[3599,16234,3720],{"class":7484},[3599,16236,16237,16239,16241],{"class":3601,"line":4581},[3599,16238,4389],{"class":3755},[3599,16240,7478],{"class":3759},[3599,16242,3773],{"class":3755},[3409,16244],{},[3416,16246,16248,16249],{"id":16247},"_45-анімація-доступності-prefers-reduced-motion","4.5. Анімація доступності: ",[3392,16250,16251],{},"prefers-reduced-motion",[3353,16253,16254],{},"Не всі користувачі комфортно ставляться до анімацій. Люди з вестибулярними порушеннями, епілепсією або просто налаштованою системою «зменшити рух» — всі вони потребують поваги до своїх уподобань.",[3353,16256,16257,16258,14337,16261,5343],{},"Tailwind надає варіант ",[3392,16259,16260],{},"motion-reduce:",[3392,16262,16263],{},"motion-safe:",[3430,16265,16267],{"className":3741,"code":16266,"language":3743,"meta":3438,"style":3438},"\u003C!-- motion-safe: — анімація ТІЛЬКИ якщо користувач НЕ вимкнув рух -->\n\u003Cdiv class=\"motion-safe:animate-bounce\">\n\n\u003C!-- motion-reduce: — альтернатива для тих, хто вимкнув -->\n\u003Cdiv class=\"motion-reduce:transition-none motion-reduce:transform-none\n            transition duration-300 hover:scale-105\">\n\n\u003C!-- Spinner: повільніший для motion-reduce -->\n\u003Cdiv class=\"animate-spin motion-reduce:animate-[spin_3s_linear_infinite]\">\n",[3392,16268,16269,16274,16289,16293,16298,16311,16318,16322,16327],{"__ignoreMap":3438},[3599,16270,16271],{"class":3601,"line":3602},[3599,16272,16273],{"class":3605},"\u003C!-- motion-safe: — анімація ТІЛЬКИ якщо користувач НЕ вимкнув рух -->\n",[3599,16275,16276,16278,16280,16282,16284,16287],{"class":3601,"line":3609},[3599,16277,3756],{"class":3755},[3599,16279,3820],{"class":3759},[3599,16281,3763],{"class":3623},[3599,16283,3766],{"class":3616},[3599,16285,16286],{"class":3769},"\"motion-safe:animate-bounce\"",[3599,16288,3773],{"class":3755},[3599,16290,16291],{"class":3601,"line":3620},[3599,16292,3779],{"emptyLinePlaceholder":3778},[3599,16294,16295],{"class":3601,"line":3637},[3599,16296,16297],{"class":3605},"\u003C!-- motion-reduce: — альтернатива для тих, хто вимкнув -->\n",[3599,16299,16300,16302,16304,16306,16308],{"class":3601,"line":3654},[3599,16301,3756],{"class":3755},[3599,16303,3820],{"class":3759},[3599,16305,3763],{"class":3623},[3599,16307,3766],{"class":3616},[3599,16309,16310],{"class":3769},"\"motion-reduce:transition-none motion-reduce:transform-none\n",[3599,16312,16313,16316],{"class":3601,"line":3660},[3599,16314,16315],{"class":3769},"            transition duration-300 hover:scale-105\"",[3599,16317,3773],{"class":3755},[3599,16319,16320],{"class":3601,"line":3666},[3599,16321,3779],{"emptyLinePlaceholder":3778},[3599,16323,16324],{"class":3601,"line":3703},[3599,16325,16326],{"class":3605},"\u003C!-- Spinner: повільніший для motion-reduce -->\n",[3599,16328,16329,16331,16333,16335,16337,16340],{"class":3601,"line":3717},[3599,16330,3756],{"class":3755},[3599,16332,3820],{"class":3759},[3599,16334,3763],{"class":3623},[3599,16336,3766],{"class":3616},[3599,16338,16339],{"class":3769},"\"animate-spin motion-reduce:animate-[spin_3s_linear_infinite]\"",[3599,16341,3773],{"class":3755},[3353,16343,16344],{},"Правильна стратегія для критичних анімацій:",[3430,16346,16348],{"className":3741,"code":16347,"language":3743,"meta":3438,"style":3438},"\u003C!-- За замовчуванням — статично.\n     Анімація тільки якщо рух прийнятний. -->\n\u003Cdiv class=\"opacity-100\n            motion-safe:opacity-0\n            motion-safe:translate-y-4\n            motion-safe:animate-fade-in-up\">\n    Контент\n\u003C\u002Fdiv>\n\n\u003C!-- Тест: відкрийте DevTools → Rendering → Emulate CSS media feature → prefers-reduced-motion: reduce -->\n",[3392,16349,16350,16355,16360,16373,16378,16383,16390,16395,16403,16407],{"__ignoreMap":3438},[3599,16351,16352],{"class":3601,"line":3602},[3599,16353,16354],{"class":3605},"\u003C!-- За замовчуванням — статично.\n",[3599,16356,16357],{"class":3601,"line":3609},[3599,16358,16359],{"class":3605},"     Анімація тільки якщо рух прийнятний. -->\n",[3599,16361,16362,16364,16366,16368,16370],{"class":3601,"line":3620},[3599,16363,3756],{"class":3755},[3599,16365,3820],{"class":3759},[3599,16367,3763],{"class":3623},[3599,16369,3766],{"class":3616},[3599,16371,16372],{"class":3769},"\"opacity-100\n",[3599,16374,16375],{"class":3601,"line":3637},[3599,16376,16377],{"class":3769},"            motion-safe:opacity-0\n",[3599,16379,16380],{"class":3601,"line":3654},[3599,16381,16382],{"class":3769},"            motion-safe:translate-y-4\n",[3599,16384,16385,16388],{"class":3601,"line":3660},[3599,16386,16387],{"class":3769},"            motion-safe:animate-fade-in-up\"",[3599,16389,3773],{"class":3755},[3599,16391,16392],{"class":3601,"line":3666},[3599,16393,16394],{"class":3616},"    Контент\n",[3599,16396,16397,16399,16401],{"class":3601,"line":3703},[3599,16398,4389],{"class":3755},[3599,16400,3820],{"class":3759},[3599,16402,3773],{"class":3755},[3599,16404,16405],{"class":3601,"line":3717},[3599,16406,3779],{"emptyLinePlaceholder":3778},[3599,16408,16409],{"class":3601,"line":3832},[3599,16410,16411],{"class":3605},"\u003C!-- Тест: відкрийте DevTools → Rendering → Emulate CSS media feature → prefers-reduced-motion: reduce -->\n",[3945,16413,16414,16417,16418,16421,16422,16424,16425,16428],{},[3392,16415,16416],{},"motion-reduce:animate-none"," недостатньо — він зупиняє анімацію, але залишає початковий стан (наприклад, ",[3392,16419,16420],{},"opacity-0","). Завжди давайте ",[3392,16423,16260],{},"-стан ",[3363,16426,16427],{},"видимий та функціональний"," без анімації.",[3409,16430],{},[3348,16432,16434],{"id":16433},"частина-v-завдання-для-самоперевірки","Частина V. Завдання для самоперевірки",[16436,16437,16438,16577,16706],"accordion",{},[16439,16440,16442,16447,16450,16523,16526,16528,16533,16544,16546,16551,16554],"accordion-item",{"label":16441},"Рівень 1: Базовий — transitions та transforms",[3353,16443,16444],{},[3363,16445,16446],{},"Завдання 1.1. Аналіз коду.",[3353,16448,16449],{},"Поясніть, що відбудеться при hover, і чому:",[3430,16451,16453],{"className":3741,"code":16452,"language":3743,"meta":3438,"style":3438},"\u003C!-- Фрагмент A -->\n\u003Cbutton class=\"bg-blue-500 transition-colors duration-300 hover:bg-blue-700 hover:scale-105\">\n\n\u003C!-- Фрагмент B -->\n\u003Cbutton class=\"bg-blue-500 transition duration-300 hover:bg-blue-700 hover:scale-105\">\n\n\u003C!-- Фрагмент C -->\n\u003Cbutton class=\"bg-blue-500 transition-all duration-300 hover:bg-blue-700 hover:scale-105 hover:rounded-full\">\n",[3392,16454,16455,16460,16475,16479,16484,16499,16503,16508],{"__ignoreMap":3438},[3599,16456,16457],{"class":3601,"line":3602},[3599,16458,16459],{"class":3605},"\u003C!-- Фрагмент A -->\n",[3599,16461,16462,16464,16466,16468,16470,16473],{"class":3601,"line":3609},[3599,16463,3756],{"class":3755},[3599,16465,3760],{"class":3759},[3599,16467,3763],{"class":3623},[3599,16469,3766],{"class":3616},[3599,16471,16472],{"class":3769},"\"bg-blue-500 transition-colors duration-300 hover:bg-blue-700 hover:scale-105\"",[3599,16474,3773],{"class":3755},[3599,16476,16477],{"class":3601,"line":3620},[3599,16478,3779],{"emptyLinePlaceholder":3778},[3599,16480,16481],{"class":3601,"line":3637},[3599,16482,16483],{"class":3605},"\u003C!-- Фрагмент B -->\n",[3599,16485,16486,16488,16490,16492,16494,16497],{"class":3601,"line":3654},[3599,16487,3756],{"class":3755},[3599,16489,3760],{"class":3759},[3599,16491,3763],{"class":3623},[3599,16493,3766],{"class":3616},[3599,16495,16496],{"class":3769},"\"bg-blue-500 transition duration-300 hover:bg-blue-700 hover:scale-105\"",[3599,16498,3773],{"class":3755},[3599,16500,16501],{"class":3601,"line":3660},[3599,16502,3779],{"emptyLinePlaceholder":3778},[3599,16504,16505],{"class":3601,"line":3666},[3599,16506,16507],{"class":3605},"\u003C!-- Фрагмент C -->\n",[3599,16509,16510,16512,16514,16516,16518,16521],{"class":3601,"line":3703},[3599,16511,3756],{"class":3755},[3599,16513,3760],{"class":3759},[3599,16515,3763],{"class":3623},[3599,16517,3766],{"class":3616},[3599,16519,16520],{"class":3769},"\"bg-blue-500 transition-all duration-300 hover:bg-blue-700 hover:scale-105 hover:rounded-full\"",[3599,16522,3773],{"class":3755},[3353,16524,16525],{},"Яка між ними різниця? Який варіант оптимальніший для GPU і чому?",[3409,16527],{},[3353,16529,16530],{},[3363,16531,16532],{},"Завдання 1.2. Центрування через translate.",[3353,16534,16535,16536,16539,16540,16543],{},"Як правильно відцентрувати ",[3392,16537,16538],{},"position: absolute"," елемент точно по центру батьківського ",[3392,16541,16542],{},"position: relative"," блоку без знання точних розмірів елемента? Напишіть HTML + Tailwind-класи.",[3409,16545],{},[3353,16547,16548],{},[3363,16549,16550],{},"Завдання 1.3. Origin та Rotation.",[3353,16552,16553],{},"Реалізуйте наступні ефекти:",[16555,16556,16557,16560,16570],"ol",{},[3360,16558,16559],{},"Картка, що нахиляється на 8° вправо при hover — з поворотом від нижнього лівого кута",[3360,16561,16562,16563,16566,16567],{},"Іконка шеврона (",[3392,16564,16565],{},"›","), що при hover повертається на 90° (стрілка \"вниз\" → стрілка \"вправо\") — анімація через ",[3392,16568,16569],{},"transition-transform duration-200",[3360,16571,16572,16573,16576],{},"Кнопка \"лайк\" з ",[3392,16574,16575],{},"animate-pop"," — спочатку стискається до 95%, потім збільшується до 115%, потім повертається до 100%",[16439,16578,16580,16585,16588,16622,16629,16631,16636,16639,16666,16669,16671,16676,16679],{"label":16579},"Рівень 2: Практика — keyframes та 3D",[3353,16581,16582],{},[3363,16583,16584],{},"Завдання 2.1. Анімований hero section.",[3353,16586,16587],{},"Реалізуйте hero section із послідовною появою елементів:",[16555,16589,16590,16598,16606,16614],{},[3360,16591,16592,16593,16595,16596],{},"Заголовок: ",[3392,16594,12256],{}," з ",[3392,16597,3560],{},[3360,16599,16600,16601,16595,16603],{},"Підзаголовок: ",[3392,16602,12239],{},[3392,16604,16605],{},"delay-200",[3360,16607,16608,16609,16595,16611],{},"Кнопки: ",[3392,16610,12239],{},[3392,16612,16613],{},"delay-400",[3360,16615,16616,16617,16595,16619,16621],{},"Фонова картинка\u002Fградієнт: ",[3392,16618,12220],{},[3392,16620,3560],{}," (інша анімація)",[3353,16623,16624,16625,16628],{},"Кожна анімація — одноразова (",[3392,16626,16627],{},"forwards","). Після завершення елементи залишаються видимими.",[3409,16630],{},[3353,16632,16633],{},[3363,16634,16635],{},"Завдання 2.2. Toast notification system.",[3353,16637,16638],{},"Реалізуйте систему сповіщень:",[3357,16640,16641,16647,16653,16663],{},[3360,16642,16643,16644],{},"Toast виїжджає справа через ",[3392,16645,16646],{},"animate-slide-in-right",[3360,16648,16649,16650],{},"Через 3 секунди: виїжджає назад через ",[3392,16651,16652],{},"animate-slide-out-right",[3360,16654,16655,16656,16659,16660],{},"Toast помилки: ",[3363,16657,16658],{},"трясеться"," через ",[3392,16661,16662],{},"animate-shake",[3360,16664,16665],{},"Стек: кожен наступний toast з'являється нижче попереднього",[3353,16667,16668],{},"Технічно: JavaScript + CSS-класи. Tailwind не потребує модифікації — тільки стандартні утиліти + кастомні keyframes.",[3409,16670],{},[3353,16672,16673],{},[3363,16674,16675],{},"Завдання 2.3. Картка з тилт-ефектом.",[3353,16677,16678],{},"Реалізуйте картку профілю з:",[3357,16680,16681,16684,16692,16699],{},[3360,16682,16683],{},"3D тилт-ефектом при русі курсора (як у розділі 4.4)",[3360,16685,16686,16688,16689],{},[3392,16687,13993],{}," + ",[3392,16690,16691],{},"perspective-[600px]",[3360,16693,16694,16695,16698],{},"Елемент з ",[3392,16696,16697],{},"[transform:translateZ(30px)]"," — аватар «виступає» з картки",[3360,16700,16701,16702,16705],{},"При ",[3392,16703,16704],{},"prefers-reduced-motion: reduce"," — тилт-ефект відсутній, картка статична",[16439,16707,16709,16716,16722,16727,16759,16764,16786,16791,16809,16814,16828,16837,16839,16844,16847,16901],{"label":16708},"Рівень 3: Архітектура — анімаційна система",[3353,16710,16711],{},[3363,16712,16713,16714,8980],{},"Завдання 3.1. Анімаційна бібліотека через ",[3392,16715,12210],{},[3353,16717,16718,16719,16721],{},"Побудуйте власну бібліотеку анімацій у ",[3392,16720,12210],{},", що охоплює всі типові потреби production-застосунку:",[3353,16723,16724],{},[3363,16725,16726],{},"Поява елементів (enter):",[3357,16728,16729,16735,16741,16747,16753],{},[3360,16730,16731,16734],{},[3392,16732,16733],{},"animate-enter-fade"," — тільки opacity",[3360,16736,16737,16740],{},[3392,16738,16739],{},"animate-enter-up"," — знизу з opacity",[3360,16742,16743,16746],{},[3392,16744,16745],{},"animate-enter-down"," — зверху з opacity",[3360,16748,16749,16752],{},[3392,16750,16751],{},"animate-enter-scale"," — від 90% scale з opacity",[3360,16754,16755,16758],{},[3392,16756,16757],{},"animate-enter-slide-right"," — виїзд справа",[3353,16760,16761],{},[3363,16762,16763],{},"Зникнення елементів (leave):",[3357,16765,16766,16771,16776,16781],{},[3360,16767,16768],{},[3392,16769,16770],{},"animate-leave-fade",[3360,16772,16773],{},[3392,16774,16775],{},"animate-leave-up",[3360,16777,16778],{},[3392,16779,16780],{},"animate-leave-scale",[3360,16782,16783],{},[3392,16784,16785],{},"animate-leave-slide-right",[3353,16787,16788],{},[3363,16789,16790],{},"Увага (attention):",[3357,16792,16793,16798,16803],{},[3360,16794,16795,16797],{},[3392,16796,16662],{}," — для форм із помилками",[3360,16799,16800,16802],{},[3392,16801,16575],{}," — для like\u002Fheart",[3360,16804,16805,16808],{},[3392,16806,16807],{},"animate-wiggle"," — для notification bell",[3353,16810,16811],{},[3363,16812,16813],{},"Нескінченні:",[3357,16815,16816,16822],{},[3360,16817,16818,16821],{},[3392,16819,16820],{},"animate-float"," — плавне гойдання (для hero illustrations)",[3360,16823,16824,16827],{},[3392,16825,16826],{},"animate-pulse-glow"," — пульсуюче glow (для CTA-кнопок)",[3353,16829,16830,16831,16833,16834,16836],{},"Для кожної напишіть ",[3392,16832,11627],{}," та зареєструйте в ",[3392,16835,12210],{},". Задокументуйте у коментарях: назву, опис, типовий випадок застосування.",[3409,16838],{},[3353,16840,16841],{},[3363,16842,16843],{},"Завдання 3.2. Мікроанімації для форми.",[3353,16845,16846],{},"Побудуйте форму з повним набором мікроанімацій:",[16555,16848,16849,16855,16861,16874,16890],{},[3360,16850,16851,16854],{},[3363,16852,16853],{},"Label",": піднімається вгору при focus (floating label)",[3360,16856,16857,16860],{},[3363,16858,16859],{},"Input border",": плавна зміна кольору + glow-ring при focus",[3360,16862,16863,16866,16867,16869,16870,16873],{},[3363,16864,16865],{},"Validation",": checkmark з'являється через ",[3392,16868,12272],{}," при правильному значенні; помилка — ",[3392,16871,16872],{},"shake"," + червона рамка",[3360,16875,16876,16879,16880,16883,16884,16886,16887,16889],{},[3363,16877,16878],{},"Submit кнопка",": при кліку — ",[3392,16881,16882],{},"scale-95",", при завантаженні — спіннер (",[3392,16885,9918],{},") замість тексту, при успіху — ",[3392,16888,16575],{}," + зелений колір",[3360,16891,16892,16895,16896,16898,16899,13956],{},[3363,16893,16894],{},"Успіх",": весь form виїжджає вгору (",[3392,16897,16775],{},"), з'являється success message (",[3392,16900,16751],{},[3353,16902,16903,16904,8980],{},"Усі анімації мають бути вимкнені при ",[3392,16905,16704],{},[3409,16907],{},[3348,16909,16911],{"id":16910},"підсумок","Підсумок",[3353,16913,16914],{},"Ця стаття охопила повну систему анімацій та трансформацій Tailwind v4:",[16916,16917,16918,16939,16958,16985,17002],"card-group",{},[16919,16920,16923,16925,16926,16928,16929,16931,16932,16935,16936,16938],"card",{"icon":16921,"title":16922},"i-heroicons-arrow-path","Transitions",[3392,16924,3394],{}," → конкретний список властивостей. ",[3392,16927,3976],{}," → тривалість. ",[3392,16930,4110],{}," → характер. ",[3392,16933,16934],{},"delay-*"," → затримка. Уникайте ",[3392,16937,3490],{}," — воно дорого.",[16919,16940,16943,3403,16946,3403,16948,3403,16951,16954,16955,16957],{"icon":16941,"title":16942},"i-heroicons-arrows-pointing-out","Transforms",[3392,16944,16945],{},"scale-*",[3392,16947,13955],{},[3392,16949,16950],{},"translate-*",[3392,16952,16953],{},"skew-*"," поєднуються без конфліктів через CSS Custom Properties. ",[3392,16956,7138],{}," контролює точку трансформації.",[16919,16959,16962,16963,3403,16966,3403,16969,3403,16972,16975,16976,16978,16979,16981,16982,8980],{"icon":16960,"title":16961},"i-heroicons-film","Keyframes","Вбудовані: ",[3392,16964,16965],{},"spin",[3392,16967,16968],{},"ping",[3392,16970,16971],{},"pulse",[3392,16973,16974],{},"bounce",". Кастомні: ",[3392,16977,11627],{}," + реєстрація в ",[3392,16980,12210],{},". Довільні: ",[3392,16983,16984],{},"animate-[name_duration_easing_fill]",[16919,16986,16989,16992,16993,16996,16997,16688,16999,17001],{"icon":16987,"title":16988},"i-heroicons-cube-transparent","3D у v4",[3392,16990,16991],{},"perspective-*"," на батьку + ",[3392,16994,16995],{},"rotate-x\u002Fy-*"," на нащадку + ",[3392,16998,13993],{},[3392,17000,14038],{}," = card flip, cube, tilt. Нова нативна підтримка без хаків.",[16919,17003,17006,14337,17008,17010,17011,17013],{"icon":17004,"title":17005},"i-heroicons-eye","Доступність",[3392,17007,16263],{},[3392,17009,16260],{}," — обов'язкові для production. Завжди тестуйте з ",[3392,17012,16704],{}," увімкненим.",[3409,17015],{},[3353,17017,17018,17027],{},[17019,17020,17021,17022],"em",{},"Попередня стаття: ",[17023,17024,17026],"a",{"href":17025},"\u002F21.tailwind\u002F10.tailwind-arbitrary-container-queries","Довільні значення та контейнерні запити",[17019,17028,17029,17030],{},"Наступна стаття: ",[17023,17031,3331],{"href":17032},"\u002F21.tailwind\u002F12.tailwind-cli-tooling",[9366,17034,17035],{},"html pre.shiki code .spJ8K, html code.shiki .spJ8K{--shiki-light:#008000;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sqdDX, html code.shiki .sqdDX{--shiki-light:#800000;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sHH4Y, html code.shiki .sHH4Y{--shiki-light:#000000;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sa4r_, html code.shiki .sa4r_{--shiki-light:#E50000;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sDUd3, html code.shiki .sDUd3{--shiki-light:#0451A5;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .s8Opu, html code.shiki .s8Opu{--shiki-light:#795E26;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sJj4R, html code.shiki .sJj4R{--shiki-light:#098658;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s0P7L, html code.shiki .s0P7L{--shiki-light:#800000;--shiki-default:#808080;--shiki-dark:#808080}html pre.shiki code .sKtos, html code.shiki .sKtos{--shiki-light:#800000;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .su9tN, html code.shiki .su9tN{--shiki-light:#0000FF;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .se1LK, html code.shiki .se1LK{--shiki-light:#CD3131;--shiki-default:#F44747;--shiki-dark:#F44747}html pre.shiki code .sD7JJ, html code.shiki .sD7JJ{--shiki-light:#000000FF;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s-QsJ, html code.shiki .s-QsJ{--shiki-light:#0070C1;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .siwwj, html code.shiki .siwwj{--shiki-light:#001080;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sbdoH, html code.shiki .sbdoH{--shiki-light:#A31515;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .s8xlr, html code.shiki .s8xlr{--shiki-light:#AF00DB;--shiki-default:#C586C0;--shiki-dark:#C586C0}",{"title":3438,"searchDepth":3609,"depth":3609,"links":17037},[17038,17039,17048,17056,17063,17071,17072],{"id":3350,"depth":3609,"text":3351},{"id":3413,"depth":3609,"text":3414,"children":17040},[17041,17042,17044,17045,17046],{"id":3418,"depth":3620,"text":3419},{"id":3576,"depth":3620,"text":17043},"1.2. Клас transition: що він робить насправді",{"id":3966,"depth":3620,"text":3967},{"id":4313,"depth":3620,"text":4314},{"id":5333,"depth":3620,"text":17047},"1.5. Transition з will-change",{"id":5464,"depth":3609,"text":5465,"children":17049},[17050,17051,17052,17053,17054,17055],{"id":5468,"depth":3620,"text":5469},{"id":5663,"depth":3620,"text":5664},{"id":6068,"depth":3620,"text":6069},{"id":6434,"depth":3620,"text":6435},{"id":6894,"depth":3620,"text":6895},{"id":7131,"depth":3620,"text":7132},{"id":9883,"depth":3609,"text":17057,"children":17058},"Частина ІІІ. Keyframe-анімації: animate-*",[17059,17060,17061],{"id":9890,"depth":3620,"text":9891},{"id":11020,"depth":3620,"text":11021},{"id":11623,"depth":3620,"text":17062},"3.3. Кастомні @keyframes у Tailwind v4",{"id":13848,"depth":3609,"text":13849,"children":17064},[17065,17066,17067,17068,17069],{"id":13852,"depth":3620,"text":13853},{"id":14051,"depth":3620,"text":14052},{"id":14326,"depth":3620,"text":14327},{"id":15716,"depth":3620,"text":15717},{"id":16247,"depth":3620,"text":17070},"4.5. Анімація доступності: prefers-reduced-motion",{"id":16433,"depth":3609,"text":16434},{"id":16910,"depth":3609,"text":16911},"Вичерпний посібник з анімацій у Tailwind CSS v4: transition, animation, вбудовані keyframes, кастомні @keyframes. Повна система трансформацій: scale, rotate, translate, skew. Нові 3D-трансформації v4: perspective, rotate-x\u002Fy\u002Fz, backface-visible. Мікроанімації для UI.","md",null,{},{"title":3327,"description":17073},"XKwmeuEbdlwe9JCVyF8NX5AnTJ23ZXKLz5Eq1QgKGb4",[17080,17082],{"title":3323,"path":3324,"stem":3325,"description":17081,"children":-1},"Вичерпний посібник з довільних значень у Tailwind v4: синтаксис квадратних дужок [], нові круглі дужки (--var), довільні властивості, calc() та CSS-функції. Контейнерні запити @container: вбудована підтримка v4, варіанти @min-*, @max-*, компонентно-орієнтована адаптивність.",{"title":3331,"path":3332,"stem":3333,"description":17083,"children":-1},"Вичерпний посібник із налаштування Tailwind CSS v4: Tailwind CLI, інтеграція з Vite, Next.js, Nuxt. PostCSS-конфігурація. CSS-entry point замість tailwind.config.js. Оптимізація збірки, purge та production-build. IntelliSense та інструменти розробника.",1782371240725]