{
  "schema": "adfactory/free-narrative-proposal/v1",
  "title": "Перший власний урок",
  "subtitle": "goPure · українська драматична пропозиція",
  "createdAt": "2026-09-17",
  "status": "Завершена авторська пропозиція для розгляду. Не схвалений сценарій виробництва. Новий фільм/голоси не генерувалися.",
  "timingStatus": "Усі адаптовані часи запропоновані. Це режисерський бюджет слів, вдихів і дій, не виміряний native soundtrack.",
  "format": "Вертикальний 9:16; native 360p у майбутньому, українське native AV, субтитри після прийнятого звуку. Без нового music stage.",
  "audience": "Українські жінки приблизно 45–60, включно з матерями. Власна потреба Олени центральна.",
  "logline": "Вирізавши себе зі свого першого навчального відео, досвідчена майстриня вирішує заплатити за повтор. Вона пробує догляд за сухою шкірою шиї, але повертається до камери зі збереженими складками — і вперше бачить у доньці власну ученицю.",
  "duration": 152.0,
  "concepts": [
    {
      "id": "C1",
      "title": "Перший власний урок",
      "selected": true,
      "premise": "Майстриня 54 років попросила змонтувати свій перший курс лише з рук. Побачивши готовий урок без себе, вирішує оплатити повтор і повернутися в кадр. Доглядає за сухою шкірою, але не чекає, що крем дасть їй право викладати.",
      "ownNeed": "Комфорт шиї та можливість стежити за уроком, а не весь час перевіряти свою зовнішність.",
      "stakes": "Власний курс після тридцяти років роботи; ще одна оренда й повторна праця.",
      "conflict": "Вона хоче авторства й одночасно сама просить сховати авторку.",
      "surprise": "Донька зупиняє новий дубль, бо хоче навчитися, а не прибрати маму з кадру.",
      "product": "Зона шиї й відчуття сухості вже впливають на її день; goPure — конкретний обраний догляд, не джерело професійної цінності.",
      "weakest": "Інший відповідний зволожувач міг би виконати базову косметичну функцію. Унікальність бренду не доведена; не вигадуємо перевагу над усіма кремами.",
      "why": "Найкраще поєднує її агентність, видиму ціну, тканину/руки/монітор як монтажні носії та тихий практичний payoff."
    },
    {
      "id": "C2",
      "title": "Одна вільна полиця",
      "selected": false,
      "premise": "Мати 57 років доглядає за літнім батьком і готує квартиру до його повернення. З усієї ванної для себе лишає лише маленьку полицю. Коли син пропонує ще й її віддати під чужі речі, вона вперше відмовляє й перебудовує побут разом із ним.",
      "ownNeed": "Щоденний час і місце для власного догляду.",
      "stakes": "Повернення в режим безперервної турботи; конкретний розклад і фізично обмежений простір.",
      "conflict": "Любов до родини стикається з її звичкою віддавати весь ресурс.",
      "surprise": "Вона просить не подарунок, а щоб дорослий син взяв одну щоденну справу на себе.",
      "product": "Банка — реальний засіб від сухості у власній рутині, а не нагорода за самопожертву.",
      "weakest": "Полиця легко стає надто очевидною метафорою, а cream placement можна замінити чашкою чаю. Історія більше про розподіл праці, ніж про шию.",
      "why": "Відхилено для цього продукту: сильне побутове ядро, слабший причинний зв’язок саме з косметичною задачею."
    },
    {
      "id": "C3",
      "title": "Перший ряд",
      "selected": false,
      "premise": "Жінка 49 років повертається в аматорський хор після багаторічної перерви. Костюмерка пропонує їй високий комір, але на генеральній репетиції він заважає вільно рухатися. Вона просить перешити власний костюм і зберегти місце в першому ряду.",
      "ownNeed": "Тілесний комфорт і участь у занятті, яке вона обрала для себе.",
      "stakes": "Конкретний виступ, готовий костюм і відповідальність перед колективом.",
      "conflict": "Бажання приховати шию входить у суперечність зі свободою сценічного руху.",
      "surprise": "Вона сама лишається після репетиції переробити костюм, не вимагає рятівного компліменту.",
      "product": "Догляд за сухою шкірою — окреме ранкове й вечірнє заняття під час репетицій.",
      "weakest": "Ризик приписати косметиці вплив на спів/дихання; музичне середовище конфліктує з форматом без нового music stage. Комір легко зробити штучною фізичною небезпекою.",
      "why": "Відхилено: потрібна інша звукова форма; не підміняємо драму неприродною небезпекою від одягу."
    }
  ],
  "scenes": [
    {
      "id": "NS01",
      "title": "Урок без авторки",
      "storyTime": "День 0, субота, 17:30",
      "location": "LOC-ATELIER",
      "start": 0.0,
      "opening": "Вертикальний 9:16, крупний ноутбука через ліве плече Олени; її край плеча зліва у передньому плані, рука Ірини справа біля тачпада. Повна географія сцени: Олена зліва; Ірина праворуч за ноутбуком, на відстані руки. На екрані вже зупинений верхній ракурс рук над зеленим швом. Олена у глиняній блузі, темно-синій робочий фартух; бежевий тонкий шарф зав’язаний вільно. Її ліва рука лежить на готовому зразку, права біля тачпада. Ірина у синьому светрі, права рука вже рухає курсор. Вікно ліворуч дає прохолодне м’яке світло, лампа за машинкою — тепле тло. Камера нерухома, еквівалент 50 мм; між поглядом Олени й екраном чиста вісь. Видимі вікові складки шиї не перебільшені; жодного ефекту лікування.",
      "intendedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
      "knowledge": "Олена знає, що просила прибрати крупний план; ще не бачила весь монтаж. Ірина виконала прохання «тільки руки», не знає глибини маминого дискомфорту.",
      "lineIds": [
        "NL001",
        "NL002",
        "NL003",
        "NL004",
        "NL005",
        "NL006",
        "NL007",
        "NL008",
        "NL009",
        "NL010",
        "NL011",
        "NL012"
      ],
      "eventIds": [
        "EV001",
        "EV002",
        "EV003",
        "EV004",
        "EV005",
        "EV006",
        "EV007",
        "EV008",
        "EV009",
        "EV010",
        "EV011",
        "EV012",
        "EV013",
        "EV014",
        "EV015",
        "EV016"
      ],
      "end": 30.5,
      "shotIds": [
        "NSH001",
        "NSH002",
        "NSH003",
        "NSH004",
        "NSH005",
        "NSH006",
        "NSH007",
        "NSH008",
        "NSH009",
        "NSH010",
        "NSH011"
      ],
      "openingEvent": "EV001"
    },
    {
      "id": "NS02",
      "title": "Дві різні задачі",
      "storyTime": "День 0, 18:10",
      "location": "LOC-ATELIER",
      "start": 30.5,
      "opening": "Загальний з дверей тієї самої майстерні, 35 мм. Ірина вже пішла; її стілець порожній, ноутбук закритий. Олена ліворуч збирає зразок; Лариса праворуч біля шафки знімає темно-зелений робочий кардиган, під ним сіра футболка з круглим вирізом. Вечірнє вікно зліва; лампа над столом уже головна. Бежевий шарф Олена щойно послабила, права рука ковзає по його краю, не дряпає шкіру. У Лариси відкрита сумка; її власна банка goPure всередині, до моменту діставання не в кадрі. Камера на рівні очей, вісь Олена—Лариса не перетинається.",
      "intendedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
      "knowledge": "Лариса не чула монтажної суперечки й питає про видиму переробку. Олена ще не знає про її крем. Лариса — користувачка, не лікарка, не продавчиня.",
      "lineIds": [
        "NL013",
        "NL014",
        "NL015",
        "NL016",
        "NL017",
        "NL018",
        "NL019",
        "NL020",
        "NL021",
        "NL022",
        "NL023",
        "NL024"
      ],
      "eventIds": [
        "EV017",
        "EV018",
        "EV019",
        "EV020",
        "EV021",
        "EV022",
        "EV023",
        "EV024",
        "EV025",
        "EV026",
        "EV027",
        "EV028",
        "EV029",
        "EV030",
        "EV031"
      ],
      "end": 63.5,
      "shotIds": [
        "NSH012",
        "NSH013",
        "NSH014",
        "NSH015",
        "NSH016",
        "NSH017",
        "NSH018",
        "NSH019",
        "NSH020",
        "NSH021",
        "NSH022",
        "NSH023",
        "NSH024"
      ],
      "openingEvent": "EV017"
    },
    {
      "id": "NS03",
      "title": "Бронювання",
      "storyTime": "День 0, вечір",
      "location": "LOC-HOME",
      "start": 63.5,
      "opening": "Кухня квартири; 50 мм, крупний згори на телефон і програму курсу; край торса Олени зліва. Вона вже кладе програму курсу на край стола. Глиняна блуза та сама, фартух і шарф зняті; сухість/складки базові. Телефон праворуч біля чашки, екран із локальною сторінкою goPure. Правою рукою гортає до форми, лівою притримує папір. Тепла лампа над столом і темне вікно, без театрального синього. Коли телефонує донька, Олена бере телефон правою рукою; екран замовлення більше не показуємо. Дитина не живе за кадром у цій кухні; Ірина на телефонному зв’язку зі своєї квартири.",
      "intendedFeeling": "Рішучість із залишковим сумнівом.",
      "knowledge": "Ірина знає дату й рішення про повтор, не знає розмови про крем. Олена бачить локальні умови та робить окреме власне замовлення.",
      "lineIds": [
        "NL025",
        "NL026"
      ],
      "eventIds": [
        "EV032",
        "EV033",
        "EV034",
        "EV035",
        "EV036"
      ],
      "end": 74.0,
      "shotIds": [
        "NSH025",
        "NSH026",
        "NSH027"
      ],
      "openingEvent": "EV032"
    },
    {
      "id": "NS04",
      "title": "Догляд і робота тривають",
      "storyTime": "Дні 3, 4, 15, 29, 42",
      "location": "LOC-BATH / LOC-HOME / LOC-ATELIER",
      "start": 74.0,
      "opening": "День 3, вечір. Середній зверху під невеликим кутом на кухонний стіл; передпліччя Олени у молочному домашньому трикотажі заходять знизу. Нова поштова коробка вже відкрита, обидва клапани лежать назовні; вона дістає СВОЮ закриту банку. Поряд чек без читабельних особистих даних. Тепле незмінне світло. Наступна локація — ванна: камера 50 мм на висоті шиї, дзеркало без двійників; Олена зліва, поличка праворуч; банка праворуч, кришка сріблом догори. Волосся зібране, обличчя/вік не змінені. До першого нанесення базовий стан зберігається. Кожен часовий стрибок має власний видимий маркер у пості.",
      "intendedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
      "knowledge": "Олена отримала власний продукт після заявки; Ларисина банка залишилася в Лариси. VO — пізніший спогад Олени, не мова її відображення.",
      "lineIds": [
        "NL027",
        "NL028",
        "NL029"
      ],
      "eventIds": [
        "EV037",
        "EV038",
        "EV039",
        "EV040",
        "EV041",
        "EV042",
        "EV043",
        "EV044",
        "EV045",
        "EV046"
      ],
      "end": 96.0,
      "shotIds": [
        "NSH028",
        "NSH029",
        "NSH030",
        "NSH031",
        "NSH032",
        "NSH033",
        "NSH034",
        "NSH035",
        "NSH036",
        "NSH037"
      ],
      "openingEvent": "EV037"
    },
    {
      "id": "NS05",
      "title": "Монітор повертається",
      "storyTime": "Шість тижнів потому, неділя, 10:00",
      "location": "LOC-ATELIER",
      "start": 96.0,
      "opening": "Той самий орендований куточок майстерні. Середній фронтальний 50 мм, Олена сидить на старій позначці зліва від машинки; Ірина праворуч за камерою, видно край її синього светра й руку. Глиняна блуза та сама; шарфа немає, фартух той самий. У руках новий зелений зразок; голка стоїть у тканині, не у пальці. Вікно зліва дифузоване до зафіксованої експозиції, лампа на попередньому місці. Монітор повернутий до Ірини. Лінії шиї, форма обличчя, вік, вага збережені; лише можливе скромне зменшення сухої фактури — задум драматизації, не доказ. Олена вже сідає рівніше, коли просить повернути екран.",
      "intendedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
      "knowledge": "Олена регулярно доглядала й готувала урок. Ірина знає про бронювання та репетиції, не оцінює косметичний результат і не може його засвідчити.",
      "lineIds": [
        "NL030",
        "NL031",
        "NL032",
        "NL033",
        "NL034",
        "NL035",
        "NL036"
      ],
      "eventIds": [
        "EV047",
        "EV048",
        "EV049",
        "EV050",
        "EV051",
        "EV052",
        "EV053",
        "EV054",
        "EV055",
        "EV056"
      ],
      "end": 113.5,
      "shotIds": [
        "NSH038",
        "NSH039",
        "NSH040",
        "NSH041",
        "NSH042",
        "NSH043"
      ],
      "openingEvent": "EV047"
    },
    {
      "id": "NS06",
      "title": "Перший власний урок",
      "storyTime": "Та сама неділя, без еліпсиса",
      "location": "LOC-ATELIER",
      "start": 113.5,
      "opening": "Прямий середній робочий кадр камери Ірини, 50 мм, без рамки інтерфейсу. Олена по центру трохи лівіше, обличчя, шия та обидві руки видимі; машинка на лівому краї, зелений зразок перед нею. Ірина поза кадром праворуч, біля камери. Глиняна блуза, той самий відкритий ґудзик, фартух; проблема у стані NS05, ніякого додаткового покращення від нового ракурсу. Світло й експозиція без змін. Голка у зразку, вільна нитка тягнеться до правої руки. Олена вже починає показ, а не позує для реклами.",
      "intendedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
      "knowledge": "Ірина бачить початок уроку як операторка. Наприкінці сама просить повторити рух, переходить у роль учениці. Ця роль не була прихованою покупкою чи хворобою.",
      "lineIds": [
        "NL037",
        "NL038",
        "NL039",
        "NL040",
        "NL041",
        "NL042",
        "NL043",
        "NL044",
        "NL045"
      ],
      "eventIds": [
        "EV057",
        "EV058",
        "EV059",
        "EV060",
        "EV061",
        "EV062",
        "EV063",
        "EV064",
        "EV065",
        "EV066",
        "EV067",
        "EV068",
        "EV069"
      ],
      "end": 136.5,
      "shotIds": [
        "NSH044",
        "NSH045",
        "NSH046",
        "NSH047",
        "NSH048",
        "NSH049",
        "NSH050",
        "NSH051"
      ],
      "openingEvent": "EV057"
    },
    {
      "id": "NS07",
      "title": "Крем має свою задачу",
      "storyTime": "Після історії; комерційне завершення",
      "location": "LOC-BATH / CARD",
      "start": 136.5,
      "opening": "Натюрморт тієї самої ванної полички, 70 мм: власна банка Олени закрита справа, срібляста кришка; зліва складений молочний рушник. Жодної людини чи рухомих губ. Тепле нейтральне світло, реальна геометрія й етикетка з перевіреного локального пакшота. Далі чиста темно-сливова фінальна картка: банка справа, назва й 2 короткі інформаційні рядки зліва; місце для українських субтитрів нижче, окремо від CTA. Усі графічні слова створюються в HyperFrames після native AV, не моделлю відео.",
      "intendedFeeling": "Спокійна ясність наступного кроку; без дефіциту й примусу.",
      "knowledge": "Глядачка побачила вигадану історію. Комерційний VO Олени — окремий регістр, не реальний відгук покупчині.",
      "lineIds": [
        "NL046",
        "NL047",
        "NL048"
      ],
      "eventIds": [
        "EV070",
        "EV071",
        "EV072",
        "EV073",
        "EV074",
        "EV075"
      ],
      "end": 152.0,
      "shotIds": [
        "NSH052",
        "NSH053"
      ],
      "openingEvent": "EV070"
    }
  ],
  "lines": [
    {
      "id": "NL001",
      "character": "IR",
      "text": "Тепер твого обличчя зовсім немає.",
      "sceneId": "NS01",
      "intention": "Повідомити про виконану правку",
      "addressee": "OL",
      "subtext": "Я зробила те, що ти просила.",
      "delivery": "Буденно, без оцінки зовнішності; наголос на «зовсім».",
      "reaction": "Олена не дякує, дивиться на екран.",
      "eventIds": [
        "EV001"
      ],
      "start": 0.0,
      "end": 2.5,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL002",
      "character": "OL",
      "text": "Зовсім?",
      "sceneId": "NS01",
      "intention": "Перевірити незворотність побаченого",
      "addressee": "IR",
      "subtext": "Я не думала, що це так виглядатиме.",
      "delivery": "Тихо, короткий вдих перед словом, питання вгору.",
      "reaction": "Ірина повертає екран до неї.",
      "eventIds": [
        "EV002"
      ],
      "start": 2.5,
      "end": 3.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL003",
      "character": "IR",
      "text": "Голос лишився. І руки.",
      "sceneId": "NS01",
      "intention": "Заспокоїти практично",
      "addressee": "OL",
      "subtext": "Урок усе ще працює.",
      "delivery": "Перше речення рівно; маленька пауза перед «І руки».",
      "reaction": "Олена торкається готового шва.",
      "eventIds": [
        "EV003"
      ],
      "start": 3.5,
      "end": 5.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL004",
      "character": "IR",
      "text": "Мамо, ти ж сама попросила.",
      "sceneId": "NS01",
      "intention": "Нагадати домовленість, не звинуватити",
      "addressee": "OL",
      "subtext": "Я не вирізала тебе з власної волі.",
      "delivery": "На «сама» м’який наголос, не докір.",
      "reaction": "Олена приймає відповідальність без виправдання.",
      "eventIds": [
        "EV004"
      ],
      "start": 5.5,
      "end": 7.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL005",
      "character": "OL",
      "text": "Я просила не так близько.",
      "sceneId": "NS01",
      "intention": "Уточнити справжню потребу",
      "addressee": "IR",
      "subtext": "Мені важко бачити себе, але я хочу бути авторкою.",
      "delivery": "Повільніше, голос трохи сухий; без сліз.",
      "reaction": "Ірина відкриває вихідний дубль.",
      "eventIds": [
        "EV005"
      ],
      "start": 7.5,
      "end": 10.0,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL006",
      "character": "OL",
      "text": "Я весь час дивлюся на шию.",
      "sceneId": "NS01",
      "intention": "Зізнатися в власному відчутті",
      "addressee": "IR",
      "subtext": "Я не можу стежити за своїм уроком.",
      "delivery": "Без відрази до себе; акцент «весь час».",
      "reaction": "Права рука торкається краю шарфа, не стискає шкіру.",
      "eventIds": [
        "EV007"
      ],
      "start": 10.5,
      "end": 13.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL007",
      "character": "IR",
      "text": "Ніхто не буде роздивлятися.",
      "sceneId": "NS01",
      "intention": "Заспокоїти",
      "addressee": "OL",
      "subtext": "Я дивлюся на твій урок, не на шкіру.",
      "delivery": "Швидка звична відповідь, потім сама чує її недостатність.",
      "reaction": "Олена лишається нерухомою.",
      "eventIds": [
        "EV008"
      ],
      "start": 13.0,
      "end": 15.0,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL008",
      "character": "OL",
      "text": "Я буду.",
      "sceneId": "NS01",
      "intention": "Поставити свою потребу в центр",
      "addressee": "IR",
      "subtext": "Мій погляд теж має значення.",
      "delivery": "Два слова тихіше за попередню репліку, без ударної музики.",
      "reaction": "Ірина припиняє пропонувати технічне маскування.",
      "eventIds": [
        "EV009"
      ],
      "start": 15.0,
      "end": 16.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL009",
      "character": "OL",
      "text": "Тридцять років шию для інших. А це мій курс. Я не хочу лишатися за кадром.",
      "sceneId": "NS01",
      "intention": "Назвати конкретну втрату",
      "addressee": "IR",
      "subtext": "Я не хочу знову лишитися за чужою роботою.",
      "delivery": "Перше речення як факт, короткий вдих. Наступні дві фрази швидше на одному видиху; жодного акторського плачу.",
      "reaction": "Долоня лягає на зразок її роботи.",
      "eventIds": [
        "EV011",
        "EV012"
      ],
      "start": 17.0,
      "end": 22.0,
      "modes": [
        "onscreen",
        "offscreen"
      ]
    },
    {
      "id": "NL010",
      "character": "OL",
      "text": "Перезнімемо. Зі мною.",
      "sceneId": "NS01",
      "intention": "Прийняти рішення до продукту",
      "addressee": "IR",
      "subtext": "Я лишаюся авторкою, навіть поки не подобаюся собі в кадрі.",
      "delivery": "На першому слові рішення; «зі мною» після піввдиху.",
      "reaction": "Ірина перевіряє календар оренди.",
      "eventIds": [
        "EV013"
      ],
      "start": 22.0,
      "end": 24.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL011",
      "character": "IR",
      "text": "Наступне вікно — за шість тижнів. І знов оренда.",
      "sceneId": "NS01",
      "intention": "Показати реальну ціну",
      "addressee": "OL",
      "subtext": "Я допоможу, але це ще один день і витрата.",
      "delivery": "Практично; після першої частини погляд від календаря на маму.",
      "reaction": "Олена дивиться на готовий шов, який доведеться повторити.",
      "eventIds": [
        "EV014",
        "EV015"
      ],
      "start": 24.0,
      "end": 28.0,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL012",
      "character": "OL",
      "text": "Бронюй. Цей шов я зроблю ще раз.",
      "sceneId": "NS01",
      "intention": "Взяти ціну на себе",
      "addressee": "IR",
      "subtext": "Це мій вибір, не твоя жертва.",
      "delivery": "Рівно, без геройства; друга частина майже до тканини.",
      "reaction": "Піддягає перший стібок розпорювачем.",
      "eventIds": [
        "EV016"
      ],
      "start": 28.0,
      "end": 30.5,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL013",
      "character": "LA",
      "text": "Навіщо розпорюєш? Уже ж готово.",
      "sceneId": "NS02",
      "intention": "Зрозуміти незвичну переробку",
      "addressee": "OL",
      "subtext": "Я бачу ціну твоєї роботи.",
      "delivery": "З дверей, без підколу; голос трохи далі.",
      "reaction": "Олена не ховає зразок.",
      "eventIds": [
        "EV017"
      ],
      "start": 30.5,
      "end": 33.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL014",
      "character": "OL",
      "text": "Для зйомки. Я себе там сховала.",
      "sceneId": "NS02",
      "intention": "Поділитися своїм рішенням",
      "addressee": "LA",
      "subtext": "Мені потрібна підтримка, але не вмовляння.",
      "delivery": "«Сховала» без усмішки; погляд на зразок, потім на колегу.",
      "reaction": "Лариса сідає, не починає оцінювати її зовнішність.",
      "eventIds": [
        "EV018"
      ],
      "start": 33.0,
      "end": 35.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL015",
      "character": "OL",
      "text": "Ще й шкіру стягує. Під шарфом тільки гірше.",
      "sceneId": "NS02",
      "intention": "Назвати відчуття, не діагноз",
      "addressee": "LA",
      "subtext": "Я хочу комфортної шкіри, не просто іншого ракурсу.",
      "delivery": "Перша частина трохи швидша, друга з видихом.",
      "reaction": "Кладе шарф на спинку свого стільця.",
      "eventIds": [
        "EV019",
        "EV020"
      ],
      "start": 35.5,
      "end": 39.5,
      "modes": [
        "onscreen",
        "offscreen"
      ]
    },
    {
      "id": "NL016",
      "character": "LA",
      "text": "А чим доглядаєш?",
      "sceneId": "NS02",
      "intention": "Запитати до поради",
      "addressee": "OL",
      "subtext": "Може, у тебе вже є зручний догляд.",
      "delivery": "Спокійно, без експертного тону.",
      "reaction": "Олена знизує одним плечем.",
      "eventIds": [
        "EV021"
      ],
      "start": 39.5,
      "end": 41.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL017",
      "character": "OL",
      "text": "Обличчя мажу щодня. А до шиї руки не доходять.",
      "sceneId": "NS02",
      "intention": "Визнати прогалину без самозвинувачення",
      "addressee": "LA",
      "subtext": "Догляд у мене вже є, я можу його розширити.",
      "delivery": "Дві зв’язані фрази на одному видиху; «щодня» швидко, потім маленький поворот на «А».",
      "reaction": "Лариса дістає свою банку.",
      "eventIds": [
        "EV022"
      ],
      "start": 41.0,
      "end": 44.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL018",
      "character": "LA",
      "text": "Я для шиї взяла goPure.",
      "sceneId": "NS02",
      "intention": "Поділитися власним вибором",
      "addressee": "OL",
      "subtext": "Ось мій конкретний засіб; вирішуй сама.",
      "delivery": "Назву вимовити один раз чітко, без рекламного підвищення.",
      "reaction": "Ставить закриту банку на чисту частину столу.",
      "eventIds": [
        "EV023"
      ],
      "start": 44.0,
      "end": 46.5,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL019",
      "character": "OL",
      "text": "І що, складки зникнуть?",
      "sceneId": "NS02",
      "intention": "Перевірити завищене очікування",
      "addressee": "LA",
      "subtext": "Я не хочу знову повірити красивій етикетці.",
      "delivery": "Скептично, але не саркастично; піднімає очі від банки.",
      "reaction": "Лариса не киває обіцянкою.",
      "eventIds": [
        "EV024"
      ],
      "start": 46.5,
      "end": 48.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL020",
      "character": "LA",
      "text": "Зовсім — не обіцяю. Це крем, Олено.",
      "sceneId": "NS02",
      "intention": "Зняти очікування стирання віку",
      "addressee": "OL",
      "subtext": "Я не продам тобі неможливе.",
      "delivery": "На «не обіцяю» нижче; звертання тепле, без повчання.",
      "reaction": "Олена видихає, лишається скептичною.",
      "eventIds": [
        "EV025"
      ],
      "start": 48.5,
      "end": 51.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL021",
      "character": "LA",
      "text": "Для зволоження. Виробник пише: і для гладкішого вигляду шкіри.",
      "sceneId": "NS02",
      "intention": "Відповісти на конкретне «навіщо»",
      "addressee": "OL",
      "subtext": "Я відділяю свій вибір від обіцянок бренду.",
      "delivery": "Перша частина коротка; другу читати як переказ із банки/сайту, не завчену науку.",
      "reaction": "Олена повертає банку етикеткою до себе.",
      "eventIds": [
        "EV026",
        "EV027"
      ],
      "start": 51.0,
      "end": 55.5,
      "modes": [
        "onscreen",
        "offscreen"
      ]
    },
    {
      "id": "NL022",
      "character": "OL",
      "text": "До зйомки встигну?",
      "sceneId": "NS02",
      "intention": "Перевірити часову пастку",
      "addressee": "LA",
      "subtext": "Мені хочеться строку, але я не хочу залежати від нього.",
      "delivery": "Прямо, трохи швидше; дивиться на календар на стіні.",
      "reaction": "Лариса відразу хитає головою на гарантію, не на догляд.",
      "eventIds": [
        "EV028"
      ],
      "start": 55.5,
      "end": 57.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL023",
      "character": "LA",
      "text": "Не знаю. Я наношу потроху вранці й увечері.",
      "sceneId": "NS02",
      "intention": "Залишити невизначеність, дати виконувану дію",
      "addressee": "OL",
      "subtext": "Я знаю свою рутину, не твій майбутній результат.",
      "delivery": "«Не знаю» окремо; далі звичайний робочий темп.",
      "reaction": "Олена слухає, не починає наносити чужий крем.",
      "eventIds": [
        "EV029",
        "EV030"
      ],
      "start": 57.0,
      "end": 60.5,
      "modes": [
        "onscreen",
        "offscreen"
      ]
    },
    {
      "id": "NL024",
      "character": "OL",
      "text": "Спробую. Але зйомку вже не скасовую.",
      "sceneId": "NS02",
      "intention": "Розділити догляд і право діяти",
      "addressee": "LA",
      "subtext": "Я можу подбати про себе, не чекати ідеалу.",
      "delivery": "«Спробую» без переможної інтонації; друга частина твердо.",
      "reaction": "Повертається до розпорювання зразка.",
      "eventIds": [
        "EV031"
      ],
      "start": 60.5,
      "end": 63.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL025",
      "character": "IR",
      "text": "Мамо, неділю підтвердили. Лишати старий дубль?",
      "sceneId": "NS03",
      "intention": "Закрити організаційне питання",
      "addressee": "OL",
      "subtext": "Я почула твоє рішення й дію.",
      "delivery": "Телефонний голос, той самий тембр; без роботизованої смуги.",
      "reaction": "Олена проводить пальцем по назві курсу.",
      "eventIds": [
        "EV034",
        "EV035"
      ],
      "start": 68.0,
      "end": 72.0,
      "modes": [
        "phone"
      ]
    },
    {
      "id": "NL026",
      "character": "OL",
      "text": "Лишай. Там хороший шов.",
      "sceneId": "NS03",
      "intention": "Зберегти цінність уже зробленого",
      "addressee": "IR",
      "subtext": "Моя робота не стала поганою через мій страх.",
      "delivery": "Невелика тепла усмішка лише на слові «шов».",
      "reaction": "Не видаляє програму; лишає її відкритою.",
      "eventIds": [
        "EV036"
      ],
      "start": 72.0,
      "end": 74.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL027",
      "character": "OL",
      "text": "Зранку й увечері — трохи крему на чисту шкіру.",
      "sceneId": "NS04",
      "intention": "Назвати просту виконувану рутину",
      "addressee": "VIEWER",
      "subtext": "Це частина дня, а не випробування моєї вартості.",
      "delivery": "Рефлексивний VO, близько й спокійно; без клінічного тону.",
      "reaction": "У кадрі Олена мовчить, рухається не в ритм слів.",
      "eventIds": [
        "EV038",
        "EV039"
      ],
      "start": 76.5,
      "end": 81.5,
      "modes": [
        "voiceover"
      ]
    },
    {
      "id": "NL028",
      "character": "OL",
      "text": "А зранку — ще й захист від сонця.",
      "sceneId": "NS04",
      "intention": "Доповнити рутину з інструкції",
      "addressee": "VIEWER",
      "subtext": "Не перетворюю крем на єдиний догляд.",
      "delivery": "Звичайна побутова ремарка, без пришвидшення.",
      "reaction": "Олена у ранковому кадрі мовчить.",
      "eventIds": [
        "EV041"
      ],
      "start": 83.5,
      "end": 86.5,
      "modes": [
        "voiceover"
      ]
    },
    {
      "id": "NL029",
      "character": "OL",
      "text": "І урок готувала. Переписувала. Знову пробувала.",
      "sceneId": "NS04",
      "intention": "Показати іншу працю за майбутнім успіхом",
      "addressee": "VIEWER",
      "subtext": "Мій урок не зробить за мене косметика.",
      "delivery": "З невеликою самоіронією в голосі, без жарту.",
      "reaction": "Руки зайняті програмою і швом; рот мовчить.",
      "eventIds": [
        "EV042",
        "EV043",
        "EV044"
      ],
      "start": 86.5,
      "end": 91.5,
      "modes": [
        "voiceover"
      ]
    },
    {
      "id": "NL030",
      "character": "OL",
      "text": "Поверни монітор до мене.",
      "sceneId": "NS05",
      "intention": "Побачити себе без захисту доньки",
      "addressee": "IR",
      "subtext": "Я сама вирішу, що залишиться.",
      "delivery": "Прямо, не наказово; спочатку дивиться на доньку.",
      "reaction": "Ірина мовчки повертає екран.",
      "eventIds": [
        "EV047"
      ],
      "start": 96.0,
      "end": 98.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL031",
      "character": "OL",
      "text": "Складки лишилися.",
      "sceneId": "NS05",
      "intention": "Назвати реальність замість чудесного результату",
      "addressee": "IR",
      "subtext": "Я бачу себе, не рекламну версію.",
      "delivery": "Тихо й фактологічно; без падіння голосу в розпач.",
      "reaction": "Ірина не заперечує і не хвалить шию.",
      "eventIds": [
        "EV049"
      ],
      "start": 99.0,
      "end": 101.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL032",
      "character": "OL",
      "text": "Але вже не так стягує. Мені комфортніше.",
      "sceneId": "NS05",
      "intention": "Назвати власне відчуття",
      "addressee": "IR",
      "subtext": "Догляд має невелику, реальну для мене задачу.",
      "delivery": "Перше речення м’яко; друге майже собі, без рекламної посмішки.",
      "reaction": "Торкнулася нижнього краю шиї один раз і опустила руку.",
      "eventIds": [
        "EV050",
        "EV051"
      ],
      "start": 101.0,
      "end": 104.5,
      "modes": [
        "onscreen",
        "offscreen"
      ]
    },
    {
      "id": "NL033",
      "character": "IR",
      "text": "Можемо трохи відсунути камеру.",
      "sceneId": "NS05",
      "intention": "Дати контроль без маскування",
      "addressee": "OL",
      "subtext": "Ти можеш обирати нормальну дистанцію.",
      "delivery": "Нейтрально, не пошепки про дефект.",
      "reaction": "Олена дивиться на руки в моніторі.",
      "eventIds": [
        "EV052"
      ],
      "start": 104.5,
      "end": 107.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL034",
      "character": "OL",
      "text": "Ні. Руки тоді гірше видно.",
      "sceneId": "NS05",
      "intention": "Вибрати потребу уроку",
      "addressee": "IR",
      "subtext": "Зараз я дивлюся на те, чого навчаю.",
      "delivery": "Відповідь швидша, ніж попереднє зізнання; професійний спокій.",
      "reaction": "Підтягує зразок на мітку, не поправляє шию.",
      "eventIds": [
        "EV053"
      ],
      "start": 107.0,
      "end": 109.5,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL035",
      "character": "IR",
      "text": "Тоді починаємо?",
      "sceneId": "NS05",
      "intention": "Віддати їй старт",
      "addressee": "OL",
      "subtext": "Я тут як партнерка, не суддя.",
      "delivery": "Тихе питання, без підганяння.",
      "reaction": "Олена вдихає, не відповідає миттєво.",
      "eventIds": [
        "EV054"
      ],
      "start": 109.5,
      "end": 111.0,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL036",
      "character": "OL",
      "text": "Так.",
      "sceneId": "NS05",
      "intention": "Дати згоду на початок",
      "addressee": "IR",
      "subtext": "Я залишаюся тут.",
      "delivery": "На видиху, без урочистості.",
      "reaction": "Ірина натискає запис, не говорить «мотор».",
      "eventIds": [
        "EV056"
      ],
      "start": 112.5,
      "end": 113.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL037",
      "character": "OL",
      "text": "Мене звати Олена Коваль. Сьогодні покажу потайний шов.",
      "sceneId": "NS06",
      "intention": "Почати власний урок своїм ім’ям",
      "addressee": "COURSE",
      "subtext": "Я авторка і можу передати це іншій людині.",
      "delivery": "Перші три слова трохи обережні; на прізвищі опора, далі природний професійний темп.",
      "reaction": "Ірина залишається тихою, не аплодує.",
      "eventIds": [
        "EV057",
        "EV058"
      ],
      "start": 113.5,
      "end": 118.0,
      "modes": [
        "onscreen",
        "offscreen"
      ]
    },
    {
      "id": "NL038",
      "character": "IR",
      "text": "Мамо, зачекай.",
      "sceneId": "NS06",
      "intention": "Зупинити для власного запиту",
      "addressee": "OL",
      "subtext": "Я хочу зрозуміти рух, не поправити зовнішність.",
      "delivery": "Швидко, але не тривожно; після звертання короткий стоп.",
      "reaction": "Олена завмирає з голкою над тканиною, не в пальці.",
      "eventIds": [
        "EV059"
      ],
      "start": 118.0,
      "end": 119.5,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL039",
      "character": "OL",
      "text": "Що?",
      "sceneId": "NS06",
      "intention": "Перевірити причину зупинки",
      "addressee": "IR",
      "subtext": "Невже знову треба мене прибрати?",
      "delivery": "Одне слово, напіввдих; не паніка.",
      "reaction": "Погляд у бік доньки, рука тримає нитку.",
      "eventIds": [
        "EV060"
      ],
      "start": 119.5,
      "end": 120.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL040",
      "character": "IR",
      "text": "Повільніше покажи. Я теж хочу навчитися.",
      "sceneId": "NS06",
      "intention": "Попросити знання для себе",
      "addressee": "OL",
      "subtext": "Твій урок потрібен і мені.",
      "delivery": "Без сліз; перше речення практичне, друге тепліше.",
      "reaction": "Олена звільняє місце біля себе.",
      "eventIds": [
        "EV061",
        "EV062"
      ],
      "start": 120.5,
      "end": 125.0,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL041",
      "character": "OL",
      "text": "Сідай. Тільки камеру не вимикай.",
      "sceneId": "NS06",
      "intention": "Запросити доньку й зберегти свою роботу",
      "addressee": "IR",
      "subtext": "Це вже наш живий урок, я не прошу стирати себе.",
      "delivery": "«Сідай» м’яко; друга частина впевнено, без комедійного punchline.",
      "reaction": "Ірина підтягує стілець справа.",
      "eventIds": [
        "EV064"
      ],
      "start": 126.0,
      "end": 128.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL042",
      "character": "IR",
      "text": "Так тримати?",
      "sceneId": "NS06",
      "intention": "Спробувати вперше",
      "addressee": "OL",
      "subtext": "Мені можна не вміти поруч із тобою.",
      "delivery": "Коротко, уважно; очі на пальцях.",
      "reaction": "Олена не забирає зразок із рук доньки.",
      "eventIds": [
        "EV065"
      ],
      "start": 128.5,
      "end": 130.0,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL043",
      "character": "OL",
      "text": "Нитку вільніше. Отак.",
      "sceneId": "NS06",
      "intention": "Дати мінімальну корисну поправку",
      "addressee": "IR",
      "subtext": "Я допоможу, а зробиш ти.",
      "delivery": "Повільно, пауза між короткими вказівками збігається з рухом.",
      "reaction": "Пальці Олени лише показують напрям, потім відходять.",
      "eventIds": [
        "EV066"
      ],
      "start": 130.0,
      "end": 132.0,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL044",
      "character": "IR",
      "text": "Тепер?",
      "sceneId": "NS06",
      "intention": "Перевірити власний результат",
      "addressee": "OL",
      "subtext": "Я хочу твоєї конкретної оцінки.",
      "delivery": "Тихо, трохи на видиху.",
      "reaction": "Мати дивиться на нитку, не оцінює доньку загалом.",
      "eventIds": [
        "EV067"
      ],
      "start": 132.0,
      "end": 133.0,
      "modes": [
        "offscreen"
      ]
    },
    {
      "id": "NL045",
      "character": "OL",
      "text": "Так. Добре.",
      "sceneId": "NS06",
      "intention": "Підтвердити зроблене",
      "addressee": "IR",
      "subtext": "Тепер ти можеш сама.",
      "delivery": "Два негучні слова, друга частина з усмішкою в голосі.",
      "reaction": "Обидві дивляться на шов, не в рекламну камеру.",
      "eventIds": [
        "EV068"
      ],
      "start": 133.0,
      "end": 134.5,
      "modes": [
        "onscreen"
      ]
    },
    {
      "id": "NL046",
      "character": "OL",
      "text": "goPure Tighten & Lift — крем для шиї та декольте.",
      "sceneId": "NS07",
      "intention": "Назвати продукт і зону",
      "addressee": "VIEWER",
      "subtext": "Ось косметичний засіб із цієї історії.",
      "delivery": "Окремий комерційний VO тим самим голосом; назву вимовити без поспіху.",
      "reaction": "У кадрі лише продукт, жодного обличчя.",
      "eventIds": [
        "EV070",
        "EV071"
      ],
      "start": 136.5,
      "end": 141.5,
      "modes": [
        "voiceover"
      ]
    },
    {
      "id": "NL047",
      "character": "OL",
      "text": "Склад і умови — за посиланням. Залиште номер для замовлення.",
      "sceneId": "NS07",
      "intention": "Дати конкретний наступний крок",
      "addressee": "VIEWER",
      "subtext": "Перевірте інформацію й самі вирішуйте.",
      "delivery": "Перша частина інформативно; друга без наказового натиску.",
      "reaction": "Жодного live-mouth кадру поверх VO.",
      "eventIds": [
        "EV072",
        "EV073"
      ],
      "start": 141.5,
      "end": 146.5,
      "modes": [
        "voiceover"
      ]
    },
    {
      "id": "NL048",
      "character": "OL",
      "text": "За умовами продавця, оплата — при отриманні.",
      "sceneId": "NS07",
      "intention": "Атрибутувати місцеву умову",
      "addressee": "VIEWER",
      "subtext": "Це нинішня обіцянка продавця, не наша перевірка виконання.",
      "delivery": "Рівний спокійний VO, без пришвидшення останніх слів.",
      "reaction": "Картка лишається нерухомою.",
      "eventIds": [
        "EV074"
      ],
      "start": 146.5,
      "end": 149.5,
      "modes": [
        "voiceover"
      ]
    }
  ],
  "events": [
    {
      "id": "EV001",
      "sceneId": "NS01",
      "shotId": "NSH001",
      "start": 0.0,
      "end": 2.5,
      "lineId": "NL001",
      "words": "Тепер твого обличчя зовсім немає.",
      "mode": "offscreen",
      "picture": "Ноутбук крупно: руки Олени шиють; голова відсутня в кадруванні. Курсор зупиняється.",
      "edit": "Вхід одразу всередину розмови; звук Ірини справа, близький кімнатний.",
      "change": "Правка видалила обличчя авторки.",
      "wantAnswered": "Хто цього хотів?",
      "payoff": "NL004",
      "swipeRisk": "Абстрактний комп’ютерний початок.",
      "repair": "Перший кадр містить зрозумілий наслідок, перша фраза його називає.",
      "attention": {
        "knowsBefore": "Нічого про цих людей; бачить зупинений монтаж.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Правка видалила обличчя авторки.",
        "expectsNext": "Хто цього хотів?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED001"
    },
    {
      "id": "EV002",
      "sceneId": "NS01",
      "shotId": "NSH002",
      "start": 2.5,
      "end": 3.5,
      "lineId": "NL002",
      "words": "Зовсім?",
      "mode": "onscreen",
      "picture": "Крупний план Олени: погляд на нижній край екрана, щелепа затримується.",
      "edit": "Прямий cut на реакцію, без наближення.",
      "change": "Олена не задоволена результатом власної правки.",
      "wantAnswered": "Чому це сталося?",
      "payoff": "NL004",
      "swipeRisk": "Штучна пауза.",
      "repair": "Одна коротка перевірка замість монологу.",
      "attention": {
        "knowsBefore": "Правка видалила обличчя авторки.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Олена не задоволена результатом власної правки.",
        "expectsNext": "Чому це сталося?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED002"
    },
    {
      "id": "EV003",
      "sceneId": "NS01",
      "shotId": "NSH003",
      "start": 3.5,
      "end": 5.5,
      "lineId": "NL003",
      "words": "Голос лишився. І руки.",
      "mode": "onscreen",
      "picture": "Середній Ірини, ноутбук між ними; вона не усміхається й не закочує очі.",
      "edit": "Зворотний кут у тій самій осі; фонове гудіння ноутбука без стрибка.",
      "change": "Знання передається, але людина зникає.",
      "wantAnswered": "Чи цього хотіла сама Олена?",
      "payoff": "NL004",
      "swipeRisk": "Переказ уже видимого.",
      "repair": "Два різні залишки: професійний голос і руки; руки стануть фінальним payoff.",
      "attention": {
        "knowsBefore": "Олена не задоволена результатом власної правки.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Знання передається, але людина зникає.",
        "expectsNext": "Чи цього хотіла сама Олена?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED003"
    },
    {
      "id": "EV004",
      "sceneId": "NS01",
      "shotId": "NSH003",
      "start": 5.5,
      "end": 7.5,
      "lineId": "NL004",
      "words": "Мамо, ти ж сама попросила.",
      "mode": "onscreen",
      "picture": "Той самий план; Ірина відводить руку від тачпада й чекає.",
      "edit": "Утримання, не новий cut.",
      "change": "Це донька; прибрати себе попросила мати.",
      "wantAnswered": "Чого вона насправді боялася?",
      "payoff": "NL006",
      "swipeRisk": "Зробити доньку кривдницею.",
      "repair": "Причина названа без лиходія й без вікової дискримінації.",
      "attention": {
        "knowsBefore": "Знання передається, але людина зникає.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Це донька; прибрати себе попросила мати.",
        "expectsNext": "Чого вона насправді боялася?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED003"
    },
    {
      "id": "EV005",
      "sceneId": "NS01",
      "shotId": "NSH004",
      "start": 7.5,
      "end": 10.0,
      "lineId": "NL005",
      "words": "Я просила не так близько.",
      "mode": "offscreen",
      "picture": "Рука Олени підсуває зелений зразок; Ірина повертає вихідний дубль, де видно обличчя й шию.",
      "edit": "L-cut з її попередньої реакції на екран; слова належать Олені, не людині в записі. Запис німий.",
      "change": "Вона хотіла дистанції, а не зникнення.",
      "wantAnswered": "Що в крупному плані її зупиняє?",
      "payoff": "NL006",
      "swipeRisk": "Плутанина, який голос іде з ноутбука.",
      "repair": "Звук запису вимкнений, немає рухомих мовних губ на екрані.",
      "attention": {
        "knowsBefore": "Це донька; прибрати себе попросила мати.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Вона хотіла дистанції, а не зникнення.",
        "expectsNext": "Що в крупному плані її зупиняє?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED004"
    },
    {
      "id": "EV006",
      "sceneId": "NS01",
      "shotId": "NSH004",
      "start": 10.0,
      "end": 10.5,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Курсор стоїть. На паузі видно природні складки й сухішу фактуру шиї.",
      "edit": "Півсекунди конкретного порівняння двох кадрувань; не beauty-zoom.",
      "change": "Показано саме те, на що вона дивиться.",
      "wantAnswered": "Назве вона свою потребу?",
      "payoff": "NL006",
      "swipeRisk": "Принизливий макроакцент.",
      "repair": "Зберігаємо обличчя і плечі в кадрі; не збільшуємо дефект.",
      "attention": {
        "knowsBefore": "Вона хотіла дистанції, а не зникнення.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Показано саме те, на що вона дивиться.",
        "expectsNext": "Назве вона свою потребу?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED004"
    },
    {
      "id": "EV007",
      "sceneId": "NS01",
      "shotId": "NSH005",
      "start": 10.5,
      "end": 13.0,
      "lineId": "NL006",
      "words": "Я весь час дивлюся на шию.",
      "mode": "onscreen",
      "picture": "Олена в три чверті, її шия в тому самому світлі; рука зупиняється на шарфі.",
      "edit": "Cut повертає з екранного зображення до живої людини.",
      "change": "Косметичний дискомфорт забирає її увагу від власної роботи.",
      "wantAnswered": "Чи заспокоєння допоможе?",
      "payoff": "NL008",
      "swipeRisk": "Перетворити вік на загрозу.",
      "repair": "Вона описує свою увагу, не чужий осуд.",
      "attention": {
        "knowsBefore": "Показано саме те, на що вона дивиться.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Косметичний дискомфорт забирає її увагу від власної роботи.",
        "expectsNext": "Чи заспокоєння допоможе?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED005"
    },
    {
      "id": "EV008",
      "sceneId": "NS01",
      "shotId": "NSH005",
      "start": 13.0,
      "end": 15.0,
      "lineId": "NL007",
      "words": "Ніхто не буде роздивлятися.",
      "mode": "offscreen",
      "picture": "Утримуємо Олену слухачкою; її пальці не відпускають шарф.",
      "edit": "Ірина за кадром, без зміни кімнатної акустики.",
      "change": "Добрий намір не прибрав власний дискомфорт жінки.",
      "wantAnswered": "Що відповість Олена?",
      "payoff": "NL008",
      "swipeRisk": "Фальшиве миттєве заспокоєння.",
      "repair": "Камера лишається на непереконаній слухачці.",
      "attention": {
        "knowsBefore": "Косметичний дискомфорт забирає її увагу від власної роботи.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Добрий намір не прибрав власний дискомфорт жінки.",
        "expectsNext": "Що відповість Олена?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED005"
    },
    {
      "id": "EV009",
      "sceneId": "NS01",
      "shotId": "NSH005",
      "start": 15.0,
      "end": 16.0,
      "lineId": "NL008",
      "words": "Я буду.",
      "mode": "onscreen",
      "picture": "Олена підводить очі з екрана на Ірину.",
      "edit": "Той самий план; зміна лише у погляді.",
      "change": "Її потреба не залежить від схвалення інших.",
      "wantAnswered": "Що вона вирішить?",
      "payoff": "NL010",
      "swipeRisk": "Слоган замість діалогу.",
      "repair": "Коротка відповідь буквально спростовує попереднє «ніхто».",
      "attention": {
        "knowsBefore": "Добрий намір не прибрав власний дискомфорт жінки.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Її потреба не залежить від схвалення інших.",
        "expectsNext": "Що вона вирішить?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED005"
    },
    {
      "id": "EV010",
      "sceneId": "NS01",
      "shotId": "NSH006",
      "start": 16.0,
      "end": 17.0,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Ірина закриває вікно кадрування, але не ноутбук. Обидві залишаються за столом.",
      "edit": "Тихий клік, без зітхання на замовлення.",
      "change": "Донька слухає замість виправляти.",
      "wantAnswered": "Мати відмовиться від курсу?",
      "payoff": "NL010",
      "swipeRisk": "Порожній reaction shot.",
      "repair": "Клік скасовує чергову маскувальну правку.",
      "attention": {
        "knowsBefore": "Її потреба не залежить від схвалення інших.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Донька слухає замість виправляти.",
        "expectsNext": "Мати відмовиться від курсу?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED006"
    },
    {
      "id": "EV011",
      "sceneId": "NS01",
      "shotId": "NSH007",
      "start": 17.0,
      "end": 19.0,
      "lineId": "NL009",
      "words": "Тридцять років шию для інших.",
      "mode": "onscreen",
      "picture": "Середній Олени за машинкою, не героїчний портрет; на тлі котушки й викрійки.",
      "edit": "Cut розширює простір професії; кімната не змінюється.",
      "change": "Це досвідчена майстриня, а не випадкова модель.",
      "wantAnswered": "Навіщо їй бути видимою саме зараз?",
      "payoff": "NL010",
      "swipeRisk": "Біографічна довідка.",
      "repair": "Одна конкретна цифра прив’язана до роботи під рукою.",
      "attention": {
        "knowsBefore": "Донька слухає замість виправляти.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Це досвідчена майстриня, а не випадкова модель.",
        "expectsNext": "Навіщо їй бути видимою саме зараз?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED007"
    },
    {
      "id": "EV012",
      "sceneId": "NS01",
      "shotId": "NSH008",
      "start": 19.0,
      "end": 22.0,
      "lineId": "NL009",
      "words": "А це мій курс. Я не хочу лишатися за кадром.",
      "mode": "offscreen",
      "picture": "Крупно її підпис «Олена Коваль. Перший урок» на паперовій програмі; рука ще лежить на тканині.",
      "edit": "L-cut однієї репліки; без паузи чи повторного набору голосу на вставці.",
      "change": "Власне авторство з’явилося вперше.",
      "wantAnswered": "Чи поступиться вона кадром?",
      "payoff": "NL010",
      "swipeRisk": "Непотрібна графіка.",
      "repair": "Реальний паперовий план курсу замість анімованого лозунга.",
      "attention": {
        "knowsBefore": "Це досвідчена майстриня, а не випадкова модель.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Власне авторство з’явилося вперше.",
        "expectsNext": "Чи поступиться вона кадром?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED008"
    },
    {
      "id": "EV013",
      "sceneId": "NS01",
      "shotId": "NSH009",
      "start": 22.0,
      "end": 24.0,
      "lineId": "NL010",
      "words": "Перезнімемо. Зі мною.",
      "mode": "onscreen",
      "picture": "Олена прибирає руку від шарфа й вирівнює програму перед собою.",
      "edit": "Повернення на той самий кут, без тріумфального наїзду.",
      "change": "Рішення вже прийнято без косметичного результату.",
      "wantAnswered": "Чого воно коштуватиме?",
      "payoff": "NL012 / NS06",
      "swipeRisk": "Крем нібито купує право зніматися.",
      "repair": "Незворотний порядок: рішення раніше за знайомство з goPure.",
      "attention": {
        "knowsBefore": "Власне авторство з’явилося вперше.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Рішення вже прийнято без косметичного результату.",
        "expectsNext": "Чого воно коштуватиме?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED007"
    },
    {
      "id": "EV014",
      "sceneId": "NS01",
      "shotId": "NSH010",
      "start": 24.0,
      "end": 26.5,
      "lineId": "NL011",
      "words": "Наступне вікно — за шість тижнів.",
      "mode": "offscreen",
      "picture": "Календар на ноутбуці: одна вільна неділя обведена. Жодних сум чи платіжних даних.",
      "edit": "Вставка мотивована перевіркою розкладу; екран зробити читабельним у пості.",
      "change": "Шість тижнів — доступність студії, не обіцянка крему.",
      "wantAnswered": "Чи прийме вона витрату?",
      "payoff": "NL012",
      "swipeRisk": "Продуктовий дедлайн маскується сюжетом.",
      "repair": "Вікно назване до появи продукту.",
      "attention": {
        "knowsBefore": "Рішення вже прийнято без косметичного результату.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Шість тижнів — доступність студії, не обіцянка крему.",
        "expectsNext": "Чи прийме вона витрату?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED009"
    },
    {
      "id": "EV015",
      "sceneId": "NS01",
      "shotId": "NSH011",
      "start": 26.5,
      "end": 28.0,
      "lineId": "NL011",
      "words": "І знов оренда.",
      "mode": "offscreen",
      "picture": "Крупно пальці Олени піднімають завершений зелений зразок.",
      "edit": "Звук Ірини продовжується над руками матері.",
      "change": "Рішення має гроші й повторну працю.",
      "wantAnswered": "Вона відступить?",
      "payoff": "NL012",
      "swipeRisk": "Словесна ціна без дії.",
      "repair": "Наступним кадром вона справді починає переробку.",
      "attention": {
        "knowsBefore": "Шість тижнів — доступність студії, не обіцянка крему.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Рішення має гроші й повторну працю.",
        "expectsNext": "Вона відступить?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED010"
    },
    {
      "id": "EV016",
      "sceneId": "NS01",
      "shotId": "NSH011",
      "start": 28.0,
      "end": 30.5,
      "lineId": "NL012",
      "words": "Бронюй. Цей шов я зроблю ще раз.",
      "mode": "offscreen",
      "picture": "Розпорювач зліва направо піддягає один стібок; нитка відходить, зразок ще цілий.",
      "edit": "Утримуємо дію до першого розімкненого стібка; тихий звук тканини.",
      "change": "Вона вкладає власний час у повернення.",
      "wantAnswered": "Як вона подбає про конкретний дискомфорт?",
      "payoff": "NS02 / NL047",
      "swipeRisk": "Формальний символ замість реальної дії.",
      "repair": "Закінчена мала дія з ниткою; повністю розпорювати не потрібно.",
      "attention": {
        "knowsBefore": "Рішення має гроші й повторну працю.",
        "invitedFeeling": "Тривога від конкретної втрати; впізнавання, а не сором за вік.",
        "getsNow": "Вона вкладає власний час у повернення.",
        "expectsNext": "Як вона подбає про конкретний дискомфорт?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED010"
    },
    {
      "id": "EV017",
      "sceneId": "NS02",
      "shotId": "NSH012",
      "start": 30.5,
      "end": 33.0,
      "lineId": "NL013",
      "words": "Навіщо розпорюєш? Уже ж готово.",
      "mode": "onscreen",
      "picture": "Лариса помічає вільну нитку; руку на сумці зупиняє.",
      "edit": "Hard cut зі збереженням звуку нитки на 0.2 с — перехід у пізніший час, не та сама дія в real time.",
      "change": "Колега бачить, що зроблену роботу переробляють.",
      "wantAnswered": "Чи Олена назве справжню причину?",
      "payoff": "NL014",
      "swipeRisk": "Новий персонаж без ролі.",
      "repair": "Видима робоча шафка і звертання про готовий шов встановлюють колегу.",
      "attention": {
        "knowsBefore": "Вона вкладає власний час у повернення.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Колега бачить, що зроблену роботу переробляють.",
        "expectsNext": "Чи Олена назве справжню причину?"
      },
      "voiceOwner": "LA",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED011"
    },
    {
      "id": "EV018",
      "sceneId": "NS02",
      "shotId": "NSH013",
      "start": 33.0,
      "end": 35.5,
      "lineId": "NL014",
      "words": "Для зйомки. Я себе там сховала.",
      "mode": "onscreen",
      "picture": "Олена складає тканину; шарф зісковзує на передпліччя, вона лишає його там.",
      "edit": "Середній, обличчя й шия у звичайному робочому світлі.",
      "change": "Вона сама бачить, що маскування зайшло надто далеко.",
      "wantAnswered": "Що саме потребує догляду?",
      "payoff": "NL015",
      "swipeRisk": "Повтор попередньої сцени.",
      "repair": "Коротке зізнання новій людині готує власну фізичну потребу.",
      "attention": {
        "knowsBefore": "Колега бачить, що зроблену роботу переробляють.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Вона сама бачить, що маскування зайшло надто далеко.",
        "expectsNext": "Що саме потребує догляду?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED012"
    },
    {
      "id": "EV019",
      "sceneId": "NS02",
      "shotId": "NSH013",
      "start": 35.5,
      "end": 37.5,
      "lineId": "NL015",
      "words": "Ще й шкіру стягує.",
      "mode": "onscreen",
      "picture": "Пальці торкаються нижнього краю шиї; без почервоніння, без імітації хвороби.",
      "edit": "Без beauty cut; шия лишається частиною портрета.",
      "change": "Є власне відчуття сухості, не лише фото.",
      "wantAnswered": "Чи є звичайна косметична допомога?",
      "payoff": "NL017",
      "swipeRisk": "Медична проблема для крему.",
      "repair": "Відчуття персонажа; без діагнозу або подразнення.",
      "attention": {
        "knowsBefore": "Вона сама бачить, що маскування зайшло надто далеко.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Є власне відчуття сухості, не лише фото.",
        "expectsNext": "Чи є звичайна косметична допомога?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED012"
    },
    {
      "id": "EV020",
      "sceneId": "NS02",
      "shotId": "NSH014",
      "start": 37.5,
      "end": 39.5,
      "lineId": "NL015",
      "words": "Під шарфом тільки гірше.",
      "mode": "offscreen",
      "picture": "Шарф лягає на спинку; Олена звільняє обидві руки для роботи.",
      "edit": "L-cut на предмет, який був її способом ховатися.",
      "change": "Маскування не дає потрібного комфорту.",
      "wantAnswered": "Що пропонує Лариса?",
      "payoff": "NL016",
      "swipeRisk": "Приписати тканині шкоду для всіх.",
      "repair": "Це суб’єктивний досвід Олени; не загальна заборона шарфів.",
      "attention": {
        "knowsBefore": "Є власне відчуття сухості, не лише фото.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Маскування не дає потрібного комфорту.",
        "expectsNext": "Що пропонує Лариса?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED013"
    },
    {
      "id": "EV021",
      "sceneId": "NS02",
      "shotId": "NSH015",
      "start": 39.5,
      "end": 41.0,
      "lineId": "NL016",
      "words": "А чим доглядаєш?",
      "mode": "onscreen",
      "picture": "Лариса сідає праворуч; сумка на підлозі біля її ноги.",
      "edit": "Новий середній, незмінний напрям погляду.",
      "change": "Порада починається з питання, не продажу.",
      "wantAnswered": "Чого бракує її рутині?",
      "payoff": "NL017",
      "swipeRisk": "Штучний підвід до реклами.",
      "repair": "Лариса ще не показує банку, слухає відповідь.",
      "attention": {
        "knowsBefore": "Маскування не дає потрібного комфорту.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Порада починається з питання, не продажу.",
        "expectsNext": "Чого бракує її рутині?"
      },
      "voiceOwner": "LA",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED014"
    },
    {
      "id": "EV022",
      "sceneId": "NS02",
      "shotId": "NSH016",
      "start": 41.0,
      "end": 44.0,
      "lineId": "NL017",
      "words": "Обличчя мажу щодня. А до шиї руки не доходять.",
      "mode": "onscreen",
      "picture": "Олена опускає руку; шия не розгладжується після дотику.",
      "edit": "Довший план для цілого речення й дихання.",
      "change": "Потрібна регулярна увага до конкретної зони.",
      "wantAnswered": "Чи потрібен саме цей продукт?",
      "payoff": "NL020 / CLAIM-03",
      "swipeRisk": "Знецінити всі креми для обличчя.",
      "repair": "Жодної репліки про їхню небезпеку чи непридатність.",
      "attention": {
        "knowsBefore": "Порада починається з питання, не продажу.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Потрібна регулярна увага до конкретної зони.",
        "expectsNext": "Чи потрібен саме цей продукт?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED012"
    },
    {
      "id": "EV023",
      "sceneId": "NS02",
      "shotId": "NSH017",
      "start": 44.0,
      "end": 46.5,
      "lineId": "NL018",
      "words": "Я для шиї взяла goPure.",
      "mode": "offscreen",
      "picture": "Рука Лариси дістає фіолетову банку зі сріблястою кришкою, ставить праворуч від тканини.",
      "edit": "L-cut з Лариси; product insert після питання, не окремий світ beauty-реклами.",
      "change": "Продукт має власницю й місце в побуті.",
      "wantAnswered": "Що він реально може?",
      "payoff": "NL020",
      "swipeRisk": "Раптовий пакшот.",
      "repair": "Банку дістає вже присутня людина з власної сумки.",
      "attention": {
        "knowsBefore": "Потрібна регулярна увага до конкретної зони.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Продукт має власницю й місце в побуті.",
        "expectsNext": "Що він реально може?"
      },
      "voiceOwner": "LA",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED015"
    },
    {
      "id": "EV024",
      "sceneId": "NS02",
      "shotId": "NSH018",
      "start": 46.5,
      "end": 48.5,
      "lineId": "NL019",
      "words": "І що, складки зникнуть?",
      "mode": "onscreen",
      "picture": "Олена не бере банку; між нею й продуктом лишається відстань долоні.",
      "edit": "Крупний портрет покупчині, не крему.",
      "change": "Покупчиня сама ставить питання про результат.",
      "wantAnswered": "Чи співрозмовниця пообіцяє чудо?",
      "payoff": "NL020",
      "swipeRisk": "Початок лекції.",
      "repair": "Відповідь наступає без вступу й обмежує обіцянку.",
      "attention": {
        "knowsBefore": "Продукт має власницю й місце в побуті.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Покупчиня сама ставить питання про результат.",
        "expectsNext": "Чи співрозмовниця пообіцяє чудо?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED016"
    },
    {
      "id": "EV025",
      "sceneId": "NS02",
      "shotId": "NSH019",
      "start": 48.5,
      "end": 51.0,
      "lineId": "NL020",
      "words": "Зовсім — не обіцяю. Це крем, Олено.",
      "mode": "onscreen",
      "picture": "Лариса прибирає руку від банки, не підсуває її покупчині.",
      "edit": "Рівний зворотний план; місце після речення на короткий вдих.",
      "change": "Складки не мають магічно зникнути.",
      "wantAnswered": "Тоді навіщо він?",
      "payoff": "NL021",
      "swipeRisk": "Антиреклама без позитивної задачі.",
      "repair": "Наступна репліка дає вузьку позитивну задачу.",
      "attention": {
        "knowsBefore": "Покупчиня сама ставить питання про результат.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Складки не мають магічно зникнути.",
        "expectsNext": "Тоді навіщо він?"
      },
      "voiceOwner": "LA",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED014"
    },
    {
      "id": "EV026",
      "sceneId": "NS02",
      "shotId": "NSH019",
      "start": 51.0,
      "end": 52.5,
      "lineId": "NL021",
      "words": "Для зволоження.",
      "mode": "onscreen",
      "picture": "Лариса дивиться на Олену, не на камеру.",
      "edit": "Та сама реплікова хвиля, без перезапуску голосу.",
      "change": "Косметична задача звужена до догляду.",
      "wantAnswered": "Що про зовнішній вигляд стверджує бренд?",
      "payoff": "NL021 / NS05",
      "swipeRisk": "Надто слабка продуктова причина.",
      "repair": "Зволоження відповідає вже названому стягуванню, а не випадковій потребі.",
      "attention": {
        "knowsBefore": "Складки не мають магічно зникнути.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Косметична задача звужена до догляду.",
        "expectsNext": "Що про зовнішній вигляд стверджує бренд?"
      },
      "voiceOwner": "LA",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED014"
    },
    {
      "id": "EV027",
      "sceneId": "NS02",
      "shotId": "NSH020",
      "start": 52.5,
      "end": 55.5,
      "lineId": "NL021",
      "words": "Виробник пише: і для гладкішого вигляду шкіри.",
      "mode": "offscreen",
      "picture": "Олена обертає закриту банку; власниця не змінюється. Етикетка незмінна, без клінічних графіків.",
      "edit": "L-cut відповіді на вставку; легкий рух тканини, не рекламний whoosh.",
      "change": "Твердження про вигляд атрибутоване виробникові.",
      "wantAnswered": "Який режим і як довго?",
      "payoff": "NL023",
      "swipeRisk": "Непідтверджений клінічний факт.",
      "repair": "Точна атрибуція; без відсотків, механізму ліфтингу чи гарантії.",
      "attention": {
        "knowsBefore": "Косметична задача звужена до догляду.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Твердження про вигляд атрибутоване виробникові.",
        "expectsNext": "Який режим і як довго?"
      },
      "voiceOwner": "LA",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED015"
    },
    {
      "id": "EV028",
      "sceneId": "NS02",
      "shotId": "NSH021",
      "start": 55.5,
      "end": 57.0,
      "lineId": "NL022",
      "words": "До зйомки встигну?",
      "mode": "onscreen",
      "picture": "Олена на мить дивиться на обведену дату, потім повертає погляд.",
      "edit": "Короткий cut; не нова дата поверх баночки.",
      "change": "Жінка пробує пов’язати догляд із дедлайном.",
      "wantAnswered": "Чи їй дадуть гарантію?",
      "payoff": "NL023",
      "swipeRisk": "Шість тижнів перетворюються на обіцянку.",
      "repair": "Відповідь прямо відмовляє в гарантії строку.",
      "attention": {
        "knowsBefore": "Твердження про вигляд атрибутоване виробникові.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Жінка пробує пов’язати догляд із дедлайном.",
        "expectsNext": "Чи їй дадуть гарантію?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED016"
    },
    {
      "id": "EV029",
      "sceneId": "NS02",
      "shotId": "NSH022",
      "start": 57.0,
      "end": 58.0,
      "lineId": "NL023",
      "words": "Не знаю.",
      "mode": "onscreen",
      "picture": "Лариса не поспішає додавати позитивну обіцянку.",
      "edit": "Утримання на межі відповіді, room tone чути.",
      "change": "Гарантії до зйомки немає.",
      "wantAnswered": "Що ж робити регулярно?",
      "payoff": "NL023 / NS04",
      "swipeRisk": "Залишити без жодної дії.",
      "repair": "Після чесної короткої відповіді — конкретна рутина.",
      "attention": {
        "knowsBefore": "Жінка пробує пов’язати догляд із дедлайном.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Гарантії до зйомки немає.",
        "expectsNext": "Що ж робити регулярно?"
      },
      "voiceOwner": "LA",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED014"
    },
    {
      "id": "EV030",
      "sceneId": "NS02",
      "shotId": "NSH023",
      "start": 58.0,
      "end": 60.5,
      "lineId": "NL023",
      "words": "Я наношу потроху вранці й увечері.",
      "mode": "offscreen",
      "picture": "Лариса забирає свою закриту банку назад у сумку. Немає спільного тестування пальцями.",
      "edit": "Одна фраза над завершеним рухом банки; звуковий простір не змінюється.",
      "change": "Режим звичайний; купівля лишається рішенням Олени.",
      "wantAnswered": "Вона поставить зйомку в залежність від шкіри?",
      "payoff": "NL024",
      "swipeRisk": "Рутина як наказ лікаря.",
      "repair": "Це досвід персонажки; режим збігається з офіційною інструкцією.",
      "attention": {
        "knowsBefore": "Гарантії до зйомки немає.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Режим звичайний; купівля лишається рішенням Олени.",
        "expectsNext": "Вона поставить зйомку в залежність від шкіри?"
      },
      "voiceOwner": "LA",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED015"
    },
    {
      "id": "EV031",
      "sceneId": "NS02",
      "shotId": "NSH024",
      "start": 60.5,
      "end": 63.5,
      "lineId": "NL024",
      "words": "Спробую. Але зйомку вже не скасовую.",
      "mode": "onscreen",
      "picture": "Середній Олени, шарф залишається на стільці; дві руки повертаються до роботи.",
      "edit": "Cut на повернену дію, не на усміхнений рекламний портрет.",
      "change": "Догляд обрано; зйомка не умовна нагорода за результат.",
      "wantAnswered": "Чи вона виконає обидва рішення?",
      "payoff": "NS03 / NS06",
      "swipeRisk": "Повтор рішення без поступу.",
      "repair": "Завершуємо сцену роботою й власною заявкою у наступній.",
      "attention": {
        "knowsBefore": "Режим звичайний; купівля лишається рішенням Олени.",
        "invitedFeeling": "Довіра до рівної співрозмовниці, скепсис до швидкої обіцянки.",
        "getsNow": "Догляд обрано; зйомка не умовна нагорода за результат.",
        "expectsNext": "Чи вона виконає обидва рішення?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED017"
    },
    {
      "id": "EV032",
      "sceneId": "NS03",
      "shotId": "NSH025",
      "start": 63.5,
      "end": 66.0,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Палець зупиняється біля «склад» на українській сторінці. Поруч паперова програма курсу.",
      "edit": "Еліпсис у вечір; звук холодильника, легке торкання скла. Інтерфейс відтворити з перевіреного snapshot у пості.",
      "change": "Олена сама перевіряє продукт, не сліпо бере чужу банку.",
      "wantAnswered": "Що обере у формі?",
      "payoff": "NL025 / CTA",
      "swipeRisk": "Нудне читання сайта.",
      "repair": "Одна зрозуміла дія: перевірка, потім заявка; жодної лекції.",
      "attention": {
        "knowsBefore": "Догляд обрано; зйомка не умовна нагорода за результат.",
        "invitedFeeling": "Рішучість із залишковим сумнівом.",
        "getsNow": "Олена сама перевіряє продукт, не сліпо бере чужу банку.",
        "expectsNext": "Що обере у формі?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED018"
    },
    {
      "id": "EV033",
      "sceneId": "NS03",
      "shotId": "NSH026",
      "start": 66.0,
      "end": 68.0,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Крупно: форма імені/номера з маскованими плановими даними, кнопка заявки; палець один раз натискає.",
      "edit": "Заявку не надсилати на справжній сайт під час виробництва; постановочний UI, жодних реальних персональних даних.",
      "change": "Є конкретна дія купівлі, не чужий подарунок.",
      "wantAnswered": "Чи бронювання зйомки теж завершене?",
      "payoff": "NL025",
      "swipeRisk": "Показати фальшиве підтвердження доставки.",
      "repair": "Показуємо лише заявку; коробка з’явиться після явного еліпсиса.",
      "attention": {
        "knowsBefore": "Олена сама перевіряє продукт, не сліпо бере чужу банку.",
        "invitedFeeling": "Рішучість із залишковим сумнівом.",
        "getsNow": "Є конкретна дія купівлі, не чужий подарунок.",
        "expectsNext": "Чи бронювання зйомки теж завершене?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED019"
    },
    {
      "id": "EV034",
      "sceneId": "NS03",
      "shotId": "NSH027",
      "start": 68.0,
      "end": 70.5,
      "lineId": "NL025",
      "words": "Мамо, неділю підтвердили.",
      "mode": "phone",
      "picture": "Телефон уже біля правого вуха Олени; її рот закритий.",
      "edit": "Телефонний J-вхід за 0.25 с перед планом обличчя; не новий диктор.",
      "change": "Бронювання підтверджене незалежно від косметичного результату.",
      "wantAnswered": "Що вона залишить від невдалої спроби?",
      "payoff": "NL026",
      "swipeRisk": "Дублювання календарної інформації.",
      "repair": "Вперше отримуємо завершену бронь, а не намір.",
      "attention": {
        "knowsBefore": "Є конкретна дія купівлі, не чужий подарунок.",
        "invitedFeeling": "Рішучість із залишковим сумнівом.",
        "getsNow": "Бронювання підтверджене незалежно від косметичного результату.",
        "expectsNext": "Що вона залишить від невдалої спроби?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED020"
    },
    {
      "id": "EV035",
      "sceneId": "NS03",
      "shotId": "NSH027",
      "start": 70.5,
      "end": 72.0,
      "lineId": "NL025",
      "words": "Лишати старий дубль?",
      "mode": "phone",
      "picture": "Олена дивиться на програму й зелений зразок біля неї.",
      "edit": "Утримання; телефонна перспектива стабільна.",
      "change": "Старий запис можна зберегти або стерти.",
      "wantAnswered": "Вона знецінить свою роботу через зовнішність?",
      "payoff": "NL026",
      "swipeRisk": "Ще одна фальшива загадка.",
      "repair": "Одразу даємо теплу, професійну відповідь.",
      "attention": {
        "knowsBefore": "Бронювання підтверджене незалежно від косметичного результату.",
        "invitedFeeling": "Рішучість із залишковим сумнівом.",
        "getsNow": "Старий запис можна зберегти або стерти.",
        "expectsNext": "Вона знецінить свою роботу через зовнішність?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED020"
    },
    {
      "id": "EV036",
      "sceneId": "NS03",
      "shotId": "NSH027",
      "start": 72.0,
      "end": 74.0,
      "lineId": "NL026",
      "words": "Лишай. Там хороший шов.",
      "mode": "onscreen",
      "picture": "Олена відповідає в телефон; лівою долонею вирівнює тканину.",
      "edit": "Одна репліка в одному плані, коротке дихання після неї.",
      "change": "Вона відділяє якість роботи від невдоволення зовнішністю.",
      "wantAnswered": "Як минатиме час до повтору?",
      "payoff": "NS04 / NL047",
      "swipeRisk": "Слоган про самоприйняття.",
      "repair": "Конкретна професійна оцінка одного шва.",
      "attention": {
        "knowsBefore": "Старий запис можна зберегти або стерти.",
        "invitedFeeling": "Рішучість із залишковим сумнівом.",
        "getsNow": "Вона відділяє якість роботи від невдоволення зовнішністю.",
        "expectsNext": "Як минатиме час до повтору?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED020"
    },
    {
      "id": "EV037",
      "sceneId": "NS04",
      "shotId": "NSH028",
      "start": 74.0,
      "end": 76.5,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Титр «За кілька днів». Олена виймає власну закриту банку з коробки.",
      "edit": "Прямий cut, тонкий шурхіт картону; жодного звуку оплати, яку не бачимо.",
      "change": "Отримання відокремлене від замовлення часом.",
      "wantAnswered": "Чи показане справжнє нанесення?",
      "payoff": "ED023",
      "swipeRisk": "Реклама обіцяє саме триденну доставку.",
      "repair": "Нечисловий часовий титр; це сюжетний час, не гарантія сервісу.",
      "attention": {
        "knowsBefore": "Вона відділяє якість роботи від невдоволення зовнішністю.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Отримання відокремлене від замовлення часом.",
        "expectsNext": "Чи показане справжнє нанесення?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED021"
    },
    {
      "id": "EV038",
      "sceneId": "NS04",
      "shotId": "NSH029",
      "start": 76.5,
      "end": 79.0,
      "lineId": "NL027",
      "words": "Зранку й увечері —",
      "mode": "voiceover",
      "picture": "Ванна, титр «Перший вечір». Олена відкручує кришку своєї банки й кладе праворуч.",
      "edit": "VO починається на вході в кімнату; акустично сухіший за діалог, той самий голос.",
      "change": "Рутина має повторення, але перше застосування ще вечірнє.",
      "wantAnswered": "Скільки й куди наносить?",
      "payoff": "ED023",
      "swipeRisk": "Змішати різні дні в одному безперервному жесті.",
      "repair": "Перший вечір названий явно, ранкове повторення буде окремо.",
      "attention": {
        "knowsBefore": "Отримання відокремлене від замовлення часом.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Рутина має повторення, але перше застосування ще вечірнє.",
        "expectsNext": "Скільки й куди наносить?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED022"
    },
    {
      "id": "EV039",
      "sceneId": "NS04",
      "shotId": "NSH030",
      "start": 79.0,
      "end": 81.5,
      "lineId": "NL027",
      "words": "трохи крему на чисту шкіру.",
      "mode": "voiceover",
      "picture": "Права рука бере малу кількість; пальці торкаються нижньої частини передньої шиї, рух угору. Ліва рука не підміняє праву на склейці.",
      "edit": "Match-on-action з банки на контакт пальців; один неперервний звук VO.",
      "change": "Є контакт продукту зі шкірою, а не тільки банка в руках.",
      "wantAnswered": "Чи буде миттєва зміна?",
      "payoff": "ED024 / NS05",
      "swipeRisk": "Модель покаже порожній жест.",
      "repair": "На production review перевірити крем до контакту й завершений один мазок.",
      "attention": {
        "knowsBefore": "Рутина має повторення, але перше застосування ще вечірнє.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Є контакт продукту зі шкірою, а не тільки банка в руках.",
        "expectsNext": "Чи буде миттєва зміна?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED023"
    },
    {
      "id": "EV040",
      "sceneId": "NS04",
      "shotId": "NSH031",
      "start": 81.5,
      "end": 83.5,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Один повний м’який рух угору закінчується; пальці відходять. Складки і суха фактура ще базові.",
      "edit": "Той самий ванний room tone, без чарівного сяйва; утримання завершення дії.",
      "change": "Перший вечір не дає візуального ліфтингу.",
      "wantAnswered": "Як це існує поряд із роботою?",
      "payoff": "ED026",
      "swipeRisk": "Фальшиве миттєве до/після.",
      "repair": "Не ретушувати і не міняти світло в межах нанесення.",
      "attention": {
        "knowsBefore": "Є контакт продукту зі шкірою, а не тільки банка в руках.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Перший вечір не дає візуального ліфтингу.",
        "expectsNext": "Як це існує поряд із роботою?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED024"
    },
    {
      "id": "EV041",
      "sceneId": "NS04",
      "shotId": "NSH032",
      "start": 83.5,
      "end": 86.5,
      "lineId": "NL028",
      "words": "А зранку — ще й захист від сонця.",
      "mode": "voiceover",
      "picture": "Титр «Наступний ранок». Та сама ванна, молочний трикотаж; goPure вже закритий. Олена бере окремий нейтральний SPF з видимим «SPF», без чужого бренду.",
      "edit": "Явний cut часу й холодніше денне світло; НЕ порівняння результату.",
      "change": "SPF — окремий етап, не властивість goPure.",
      "wantAnswered": "Що ще вона робить ці тижні?",
      "payoff": "NL029",
      "swipeRisk": "Ненавмисно приписати SPF самому крему.",
      "repair": "Окрема упаковка і окремий рух, не нанесення з тієї самої банки.",
      "attention": {
        "knowsBefore": "Перший вечір не дає візуального ліфтингу.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "SPF — окремий етап, не властивість goPure.",
        "expectsNext": "Що ще вона робить ці тижні?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED025"
    },
    {
      "id": "EV042",
      "sceneId": "NS04",
      "shotId": "NSH033",
      "start": 86.5,
      "end": 88.5,
      "lineId": "NL029",
      "words": "І урок готувала.",
      "mode": "voiceover",
      "picture": "Титр «Другий тиждень». Майстерня вдень: Олена закреслює довге пояснення в програмі.",
      "edit": "Cut на рух олівця; VO переносить нас із догляду в роботу.",
      "change": "Тижні заповнені підготовкою, а не очікуванням дива.",
      "wantAnswered": "Що вона змінює в уроці?",
      "payoff": "ED027 / NL044",
      "swipeRisk": "Невизначений «монтаж».",
      "repair": "Окремий видимий вчинок з конкретним папером.",
      "attention": {
        "knowsBefore": "SPF — окремий етап, не властивість goPure.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Тижні заповнені підготовкою, а не очікуванням дива.",
        "expectsNext": "Що вона змінює в уроці?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED026"
    },
    {
      "id": "EV043",
      "sceneId": "NS04",
      "shotId": "NSH034",
      "start": 88.5,
      "end": 90.0,
      "lineId": "NL029",
      "words": "Переписувала.",
      "mode": "voiceover",
      "picture": "Крупно папір: біля закресленого рядка вона пише «показати повільніше».",
      "edit": "L-cut, наступний кут того самого олівця; графіку не генерувати Omni.",
      "change": "Пояснення стає простішим для учениці.",
      "wantAnswered": "Чи рука зможе показати повільно?",
      "payoff": "NL043 / NL047",
      "swipeRisk": "Текст нечитабельний на телефоні.",
      "repair": "Одна коротка примітка, великий рукопис у пості.",
      "attention": {
        "knowsBefore": "Тижні заповнені підготовкою, а не очікуванням дива.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Пояснення стає простішим для учениці.",
        "expectsNext": "Чи рука зможе показати повільно?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED027"
    },
    {
      "id": "EV044",
      "sceneId": "NS04",
      "shotId": "NSH035",
      "start": 90.0,
      "end": 91.5,
      "lineId": "NL029",
      "words": "Знову пробувала.",
      "mode": "voiceover",
      "picture": "Титр «Четвертий тиждень». У глиняній блузі без шарфа Олена повторює петлю на новому зеленому зразку.",
      "edit": "Cut часу за фазою руху голки, не морф шкіри.",
      "change": "Повторна праця реально триває.",
      "wantAnswered": "Що з доглядом у ці дні?",
      "payoff": "ED029",
      "swipeRisk": "Курс нібито з’являється сам.",
      "repair": "Видимий новий зразок і повтор технічної дії.",
      "attention": {
        "knowsBefore": "Пояснення стає простішим для учениці.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Повторна праця реально триває.",
        "expectsNext": "Що з доглядом у ці дні?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED028"
    },
    {
      "id": "EV045",
      "sceneId": "NS04",
      "shotId": "NSH036",
      "start": 91.5,
      "end": 94.0,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Пізній вечір четвертого тижня: Олена в молочному трикотажі закриває банку після догляду; крему трохи менше. На краю полички програма курсу.",
      "edit": "Еліпсис із тихим різьбовим звуком кришки; не «один день» від зміни блузи.",
      "change": "Догляд не зник після першого вечора.",
      "wantAnswered": "Що буде перед камерою?",
      "payoff": "NS05",
      "swipeRisk": "Повтор реклами банки.",
      "repair": "Банка кадрується разом із робочим папером, hold тільки до закриття.",
      "attention": {
        "knowsBefore": "Повторна праця реально триває.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Догляд не зник після першого вечора.",
        "expectsNext": "Що буде перед камерою?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED029"
    },
    {
      "id": "EV046",
      "sceneId": "NS04",
      "shotId": "NSH037",
      "start": 94.0,
      "end": 96.0,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Титр «Шість тижнів потому». Олена застібає глиняну блузу до того самого ґудзика, бере зелений зразок. Шарф лишається на домашньому гачку.",
      "edit": "Cut на ранок, звук тканини веде до студії.",
      "change": "Настав оплачений повтор, не строк гарантованого ефекту.",
      "wantAnswered": "Чи залишиться вона в кадрі?",
      "payoff": "NL037",
      "swipeRisk": "Знятий шарф видають за доказ шкіри.",
      "repair": "У наступній сцені той самий ракурс прямо показує збережені складки.",
      "attention": {
        "knowsBefore": "Догляд не зник після першого вечора.",
        "invitedFeeling": "Спокійна надія, відчуття вкладеної праці; без чудесного перетворення.",
        "getsNow": "Настав оплачений повтор, не строк гарантованого ефекту.",
        "expectsNext": "Чи залишиться вона в кадрі?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED030"
    },
    {
      "id": "EV047",
      "sceneId": "NS05",
      "shotId": "NSH038",
      "start": 96.0,
      "end": 98.0,
      "lineId": "NL030",
      "words": "Поверни монітор до мене.",
      "mode": "onscreen",
      "picture": "Олена вже сидить на мітці; руки не тягнуться до шиї, а тримають зразок.",
      "edit": "Вхід звуком до завершення руху стільця; без slow motion.",
      "change": "Вона сама просить побачити кадр.",
      "wantAnswered": "Як зустріне видиму шию?",
      "payoff": "NL031",
      "swipeRisk": "Успіх оголошено до випробування.",
      "repair": "Починаємо з прохання, а не впевненої усмішки.",
      "attention": {
        "knowsBefore": "Настав оплачений повтор, не строк гарантованого ефекту.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Вона сама просить побачити кадр.",
        "expectsNext": "Як зустріне видиму шию?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED031"
    },
    {
      "id": "EV048",
      "sceneId": "NS05",
      "shotId": "NSH039",
      "start": 98.0,
      "end": 99.0,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Рука Ірини повертає монітор. На ньому обличчя, шия й руки Олени разом.",
      "edit": "Insert із завершеним поворотом; шурхіт шарніра без ефектного клацання.",
      "change": "Мати бачить власний повний кадр.",
      "wantAnswered": "Вона знов попросить обрізати?",
      "payoff": "NL031 / NL037",
      "swipeRisk": "Екран нечитабельний або інша людина.",
      "repair": "У пості вставити той самий поточний дубль, без молодшої заміни.",
      "attention": {
        "knowsBefore": "Вона сама просить побачити кадр.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Мати бачить власний повний кадр.",
        "expectsNext": "Вона знов попросить обрізати?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED032"
    },
    {
      "id": "EV049",
      "sceneId": "NS05",
      "shotId": "NSH040",
      "start": 99.0,
      "end": 101.0,
      "lineId": "NL031",
      "words": "Складки лишилися.",
      "mode": "onscreen",
      "picture": "Крупний портрет Олени в тому самому фокусному й нейтральному куті; вікові лінії видимі.",
      "edit": "Відповідь на старий «зникнуть?» через багато подій; не split-screen efficacy proof.",
      "change": "План не вимагає зникнення вікових складок.",
      "wantAnswered": "То що дала рутина самій жінці?",
      "payoff": "NL032",
      "swipeRisk": "Антикульмінація.",
      "repair": "Наступна відповідь про конкретний комфорт, потім рішення діяти.",
      "attention": {
        "knowsBefore": "Мати бачить власний повний кадр.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "План не вимагає зникнення вікових складок.",
        "expectsNext": "То що дала рутина самій жінці?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED033"
    },
    {
      "id": "EV050",
      "sceneId": "NS05",
      "shotId": "NSH040",
      "start": 101.0,
      "end": 103.0,
      "lineId": "NL032",
      "words": "Але вже не так стягує.",
      "mode": "onscreen",
      "picture": "Олена один раз торкається шиї; не тягне й не підтягує її пальцями.",
      "edit": "Той самий план і світло; не монтажне «до/після».",
      "change": "Персонажка описує комфорт; це вигаданий досвід у драматизації.",
      "wantAnswered": "Чи цього досить, щоб почати?",
      "payoff": "NL037",
      "swipeRisk": "Вигаданий відгук видається реальним.",
      "repair": "Позначка «Драматизація. Результати індивідуальні» під сценою й у фінальному титрі.",
      "attention": {
        "knowsBefore": "План не вимагає зникнення вікових складок.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Персонажка описує комфорт; це вигаданий досвід у драматизації.",
        "expectsNext": "Чи цього досить, щоб почати?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED033"
    },
    {
      "id": "EV051",
      "sceneId": "NS05",
      "shotId": "NSH041",
      "start": 103.0,
      "end": 104.5,
      "lineId": "NL032",
      "words": "Мені комфортніше.",
      "mode": "offscreen",
      "picture": "Ірина слухає, не підтакує косметичній оцінці; пальці біля кнопки запису зупинені.",
      "edit": "L-cut на доньку, Оленина фраза ще в тій самій кімнаті.",
      "change": "Донька чує потребу матері, не сертифікує ефективність.",
      "wantAnswered": "Що просить зробити з кадром?",
      "payoff": "NL034",
      "swipeRisk": "Кивок як клінічне підтвердження.",
      "repair": "Немає кивка «працює», лише уважне очікування рішення.",
      "attention": {
        "knowsBefore": "Персонажка описує комфорт; це вигаданий досвід у драматизації.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Донька чує потребу матері, не сертифікує ефективність.",
        "expectsNext": "Що просить зробити з кадром?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED034"
    },
    {
      "id": "EV052",
      "sceneId": "NS05",
      "shotId": "NSH041",
      "start": 104.5,
      "end": 107.0,
      "lineId": "NL033",
      "words": "Можемо трохи відсунути камеру.",
      "mode": "onscreen",
      "picture": "Ірина показує рукою на простір позаду штатива, не рухає його сама.",
      "edit": "Утримання того самого кута; камера ще нерухома.",
      "change": "Є технічна свобода, рішення за Оленою.",
      "wantAnswered": "Вона знов обере зникнення?",
      "payoff": "NL034",
      "swipeRisk": "Донька знов «рятує» зовнішність.",
      "repair": "Рух запропонований, не виконаний без згоди.",
      "attention": {
        "knowsBefore": "Донька чує потребу матері, не сертифікує ефективність.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Є технічна свобода, рішення за Оленою.",
        "expectsNext": "Вона знов обере зникнення?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED034"
    },
    {
      "id": "EV053",
      "sceneId": "NS05",
      "shotId": "NSH042",
      "start": 107.0,
      "end": 109.5,
      "lineId": "NL034",
      "words": "Ні. Руки тоді гірше видно.",
      "mode": "offscreen",
      "picture": "Крупно руки ставлять зелений зразок точно на мітку столу.",
      "edit": "L-cut із рішення на його практичний наслідок.",
      "change": "Її увага повернулася до викладання.",
      "wantAnswered": "Вона готова назватися?",
      "payoff": "NL037",
      "swipeRisk": "Слоган «люби себе».",
      "repair": "Рішення продиктоване читабельністю шва, а не декларацією.",
      "attention": {
        "knowsBefore": "Є технічна свобода, рішення за Оленою.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Її увага повернулася до викладання.",
        "expectsNext": "Вона готова назватися?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED035"
    },
    {
      "id": "EV054",
      "sceneId": "NS05",
      "shotId": "NSH043",
      "start": 109.5,
      "end": 111.0,
      "lineId": "NL035",
      "words": "Тоді починаємо?",
      "mode": "offscreen",
      "picture": "Портрет Олени. Вона перестає перевіряти монітор, переводить очі до об’єктива.",
      "edit": "Донька за кадром; зберігаємо мамину реакцію замість автоматичного reverse.",
      "change": "Остання можливість відступити ще є.",
      "wantAnswered": "Пролунає її власне ім’я?",
      "payoff": "NL037",
      "swipeRisk": "Напруга вже вирішена.",
      "repair": "Погляд має реально пройти з монітора до об’єктива.",
      "attention": {
        "knowsBefore": "Її увага повернулася до викладання.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Остання можливість відступити ще є.",
        "expectsNext": "Пролунає її власне ім’я?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED036"
    },
    {
      "id": "EV055",
      "sceneId": "NS05",
      "shotId": "NSH043",
      "start": 111.0,
      "end": 112.5,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Олена робить один повний вдих. Пальці лежать на тканині, плечі опускаються, погляд тримається на об’єктиві.",
      "edit": "Без нової склейки; чути її справжній вдих і кімнату.",
      "change": "Вона дає собі час, не стає іншою людиною.",
      "wantAnswered": "Чи витримає перші слова?",
      "payoff": "NL037",
      "swipeRisk": "Порожня тиша.",
      "repair": "Точне очікування першого представлення, 1.5 с, не рекламне завмирання.",
      "attention": {
        "knowsBefore": "Остання можливість відступити ще є.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Вона дає собі час, не стає іншою людиною.",
        "expectsNext": "Чи витримає перші слова?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED036"
    },
    {
      "id": "EV056",
      "sceneId": "NS05",
      "shotId": "NSH043",
      "start": 112.5,
      "end": 113.5,
      "lineId": "NL036",
      "words": "Так.",
      "mode": "onscreen",
      "picture": "Погляд Олени не тікає назад на монітор.",
      "edit": "Той самий hold; короткий практичний клік запису в кінці.",
      "change": "Згода виконана в кадрі.",
      "wantAnswered": "Якою вона буде викладачкою?",
      "payoff": "NL037 / NL040",
      "swipeRisk": "Затягнутий старт.",
      "repair": "Наступна фраза вже урок, без повторної заставки.",
      "attention": {
        "knowsBefore": "Вона дає собі час, не стає іншою людиною.",
        "invitedFeeling": "Напружене повернення до того самого випробування; полегшення без дива.",
        "getsNow": "Згода виконана в кадрі.",
        "expectsNext": "Якою вона буде викладачкою?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED036"
    },
    {
      "id": "EV057",
      "sceneId": "NS06",
      "shotId": "NSH044",
      "start": 113.5,
      "end": 115.5,
      "lineId": "NL037",
      "words": "Мене звати Олена Коваль.",
      "mode": "onscreen",
      "picture": "Прямий середній кадр; жінка вперше звертається в об’єктив, шия не закрита.",
      "edit": "Зміна точки зору на камеру уроку без зміни світла; без музичної кульмінації.",
      "change": "Замість безіменних рук — людина з власним ім’ям.",
      "wantAnswered": "Чи вона справді навчить?",
      "payoff": "NL040 / NL047",
      "swipeRisk": "Плакатне представлення.",
      "repair": "Фраза одразу переходить у конкретний урок.",
      "attention": {
        "knowsBefore": "Згода виконана в кадрі.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Замість безіменних рук — людина з власним ім’ям.",
        "expectsNext": "Чи вона справді навчить?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED037"
    },
    {
      "id": "EV058",
      "sceneId": "NS06",
      "shotId": "NSH045",
      "start": 115.5,
      "end": 118.0,
      "lineId": "NL037",
      "words": "Сьогодні покажу потайний шов.",
      "mode": "offscreen",
      "picture": "Робочий крупний рук над тканиною; обличчя тепер можна прибрати для користі пояснення.",
      "edit": "Мотивований L-cut: голос Олени без reset, її рот поза кадром.",
      "change": "Той самий крупний рук змінив функцію: тепер це навчання, не приховування.",
      "wantAnswered": "Що саме треба побачити?",
      "payoff": "NL040",
      "swipeRisk": "Суперечність «не прибирати обличчя».",
      "repair": "Авторка вже встановлена; insert служить її знанню.",
      "attention": {
        "knowsBefore": "Замість безіменних рук — людина з власним ім’ям.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Той самий крупний рук змінив функцію: тепер це навчання, не приховування.",
        "expectsNext": "Що саме треба побачити?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED038"
    },
    {
      "id": "EV059",
      "sceneId": "NS06",
      "shotId": "NSH045",
      "start": 118.0,
      "end": 119.5,
      "lineId": "NL038",
      "words": "Мамо, зачекай.",
      "mode": "offscreen",
      "picture": "Голка зупиняється над тканиною. Нитка ще не затягнута.",
      "edit": "Живе переривання; останній рух має завершитися без стрибка.",
      "change": "Урок перервала донька; причина ще невідома.",
      "wantAnswered": "Знову проблема з кадром?",
      "payoff": "NL040",
      "swipeRisk": "Дешевий новий твіст.",
      "repair": "Перерва виростає з того, що рух надто швидкий для новачка.",
      "attention": {
        "knowsBefore": "Той самий крупний рук змінив функцію: тепер це навчання, не приховування.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Урок перервала донька; причина ще невідома.",
        "expectsNext": "Знову проблема з кадром?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED038"
    },
    {
      "id": "EV060",
      "sceneId": "NS06",
      "shotId": "NSH046",
      "start": 119.5,
      "end": 120.5,
      "lineId": "NL039",
      "words": "Що?",
      "mode": "onscreen",
      "picture": "Крупний Олени, невелике очікування в очах; не чіпає шию.",
      "edit": "Cut на реакцію; не додаємо flashback для пояснення.",
      "change": "Старий сумнів коротко повертається.",
      "wantAnswered": "Що хоче донька?",
      "payoff": "NL040",
      "swipeRisk": "Повернути жінку в нульову впевненість.",
      "repair": "Лише коротка перевірка, не нова криза.",
      "attention": {
        "knowsBefore": "Урок перервала донька; причина ще невідома.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Старий сумнів коротко повертається.",
        "expectsNext": "Що хоче донька?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED039"
    },
    {
      "id": "EV061",
      "sceneId": "NS06",
      "shotId": "NSH047",
      "start": 120.5,
      "end": 123.0,
      "lineId": "NL040",
      "words": "Повільніше покажи.",
      "mode": "onscreen",
      "picture": "Ірина відходить від штатива на півкроку, погляд на нитці.",
      "edit": "Показуємо її обличчя лише на відповідь, не на мамине запитання.",
      "change": "Зупинка стосується темпу уроку, не зовнішності.",
      "wantAnswered": "Як мати відреагує на нову ученицю?",
      "payoff": "NL041",
      "swipeRisk": "Надто солодкий поворот.",
      "repair": "Практичне «повільніше» перед емоційним змістом.",
      "attention": {
        "knowsBefore": "Старий сумнів коротко повертається.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Зупинка стосується темпу уроку, не зовнішності.",
        "expectsNext": "Як мати відреагує на нову ученицю?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED040"
    },
    {
      "id": "EV062",
      "sceneId": "NS06",
      "shotId": "NSH047",
      "start": 123.0,
      "end": 125.0,
      "lineId": "NL040",
      "words": "Я теж хочу навчитися.",
      "mode": "onscreen",
      "picture": "Донька дивиться на вільний стілець, не на шию матері.",
      "edit": "Утримання: інтонація тихіша, без нового наближення.",
      "change": "Робота матері стала особисто потрібною доньці.",
      "wantAnswered": "Вони сядуть разом?",
      "payoff": "NL041 / NL047",
      "swipeRisk": "Раптова ідеальна донька.",
      "repair": "Запит скромний: один шов, не обіцянка успадкувати професію.",
      "attention": {
        "knowsBefore": "Зупинка стосується темпу уроку, не зовнішності.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Робота матері стала особисто потрібною доньці.",
        "expectsNext": "Вони сядуть разом?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED040"
    },
    {
      "id": "EV063",
      "sceneId": "NS06",
      "shotId": "NSH048",
      "start": 125.0,
      "end": 126.0,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Олена дивиться на доньку, куточок рота піднімається; потім очі на стілець.",
      "edit": "Повернення на коротку реакцію; дати їй відбутися, не підкладати VO.",
      "change": "Мати почула визнання через конкретне прохання.",
      "wantAnswered": "Що вона зробить з ним?",
      "payoff": "NL041",
      "swipeRisk": "Вимушена сльоза.",
      "repair": "Дозволена мала усмішка й звичайний рух стільця.",
      "attention": {
        "knowsBefore": "Робота матері стала особисто потрібною доньці.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Мати почула визнання через конкретне прохання.",
        "expectsNext": "Що вона зробить з ним?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED039"
    },
    {
      "id": "EV064",
      "sceneId": "NS06",
      "shotId": "NSH049",
      "start": 126.0,
      "end": 128.5,
      "lineId": "NL041",
      "words": "Сідай. Тільки камеру не вимикай.",
      "mode": "onscreen",
      "picture": "Ширший двоплановий: Олена посуває стілець праворуч, донька сідає.",
      "edit": "Cut відкриває місце, яке весь час було поряд; рух обох не перекриває об’єктив.",
      "change": "Вона просить продовжити запис із собою.",
      "wantAnswered": "Чи зможе донька повторити рух?",
      "payoff": "NL043 / NL045",
      "swipeRisk": "Мати знов служить лише доньці.",
      "repair": "Камеру лишає ввімкненою: власний курс триває.",
      "attention": {
        "knowsBefore": "Мати почула визнання через конкретне прохання.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Вона просить продовжити запис із собою.",
        "expectsNext": "Чи зможе донька повторити рух?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED041"
    },
    {
      "id": "EV065",
      "sceneId": "NS06",
      "shotId": "NSH050",
      "start": 128.5,
      "end": 130.0,
      "lineId": "NL042",
      "words": "Так тримати?",
      "mode": "offscreen",
      "picture": "Руки Ірини у синіх рукавах беруть голку; Оленині глиняні рукави поруч.",
      "edit": "Insert мотивований питанням; дві пари рук чітко розрізнені.",
      "change": "Є справжня спроба новачка.",
      "wantAnswered": "Що виправить майстриня?",
      "payoff": "NL043",
      "swipeRisk": "Руки гублять власника.",
      "repair": "Колір рукавів і позиції ліворуч/праворуч сталі.",
      "attention": {
        "knowsBefore": "Вона просить продовжити запис із собою.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Є справжня спроба новачка.",
        "expectsNext": "Що виправить майстриня?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED042"
    },
    {
      "id": "EV066",
      "sceneId": "NS06",
      "shotId": "NSH050",
      "start": 130.0,
      "end": 132.0,
      "lineId": "NL043",
      "words": "Нитку вільніше. Отак.",
      "mode": "offscreen",
      "picture": "Олена зменшує натяг нитки своїм пальцем, прибирає руку; Ірина продовжує сама.",
      "edit": "Утримати один неперервний handoff, без монтажної заміни завершеного шва.",
      "change": "Професійна турбота — дати іншій людині зробити.",
      "wantAnswered": "Чи вийде стібок?",
      "payoff": "NL043 / NL045",
      "swipeRisk": "Порожня ілюстрація «теплих рук».",
      "repair": "Обов’язкова механіка: натяг зменшується, учениця закінчує рух.",
      "attention": {
        "knowsBefore": "Є справжня спроба новачка.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Професійна турбота — дати іншій людині зробити.",
        "expectsNext": "Чи вийде стібок?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED042"
    },
    {
      "id": "EV067",
      "sceneId": "NS06",
      "shotId": "NSH050",
      "start": 132.0,
      "end": 133.0,
      "lineId": "NL044",
      "words": "Тепер?",
      "mode": "offscreen",
      "picture": "Ірина протягує голку, шов сходиться; нитка не проходить крізь палець.",
      "edit": "Той самий крупний до завершення дії.",
      "change": "Учениця завершила один стібок.",
      "wantAnswered": "Який вердикт?",
      "payoff": "NL045",
      "swipeRisk": "Довгий технічний урок.",
      "repair": "Показуємо лише один перевірюваний стібок.",
      "attention": {
        "knowsBefore": "Професійна турбота — дати іншій людині зробити.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Учениця завершила один стібок.",
        "expectsNext": "Який вердикт?"
      },
      "voiceOwner": "IR",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED042"
    },
    {
      "id": "EV068",
      "sceneId": "NS06",
      "shotId": "NSH051",
      "start": 133.0,
      "end": 134.5,
      "lineId": "NL045",
      "words": "Так. Добре.",
      "mode": "onscreen",
      "picture": "Двоплановий збоку: Олена ближче, Ірина праворуч; обидві схилені до зразка, шия Олени має природні складки при нахилі.",
      "edit": "Вихід із крупного рук на звичайний спільний момент.",
      "change": "Емоційна винагорода — передане вміння, не молодше обличчя.",
      "wantAnswered": "Що лишається глядачці про продукт?",
      "payoff": "NL046",
      "swipeRisk": "Сентиментальний beauty freeze.",
      "repair": "Життя триває в природному незручному ракурсі.",
      "attention": {
        "knowsBefore": "Учениця завершила один стібок.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Емоційна винагорода — передане вміння, не молодше обличчя.",
        "expectsNext": "Що лишається глядачці про продукт?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Артикулює лише названий мовець у кадрі; слухач не підспівує.",
      "setupId": "ED043"
    },
    {
      "id": "EV069",
      "sceneId": "NS06",
      "shotId": "NSH051",
      "start": 134.5,
      "end": 136.5,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Ірина пробує наступний стібок сама. Олена прибирає свою руку повністю й дивиться на роботу.",
      "edit": "Тримати звичайний рух і кімнатний звук; не додавати поцілунок, сміх чи нові слова.",
      "change": "Мати лишилася в кадрі й дозволила учениці діяти.",
      "wantAnswered": "Куди перейти по інформацію?",
      "payoff": "NS07",
      "swipeRisk": "VO заглушить зароблену реакцію.",
      "repair": "Дві секунди без слів до початку комерційного завершення.",
      "attention": {
        "knowsBefore": "Емоційна винагорода — передане вміння, не молодше обличчя.",
        "invitedFeeling": "Полегшення через дію; тепло звичайного спільного заняття.",
        "getsNow": "Мати лишилася в кадрі й дозволила учениці діяти.",
        "expectsNext": "Куди перейти по інформацію?"
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED043"
    },
    {
      "id": "EV070",
      "sceneId": "NS07",
      "shotId": "NSH052",
      "start": 136.5,
      "end": 139.5,
      "lineId": "NL046",
      "words": "goPure Tighten & Lift —",
      "mode": "voiceover",
      "picture": "Закрита банка на поличці; етикетка читається, без обертового 3D-підміщення.",
      "edit": "Після заробленої тиші — чистий VO; room tone м’яко згасає за 0.4 с.",
      "change": "Продукт названий повністю.",
      "wantAnswered": "Для чого він і куди перейти?",
      "payoff": "NL047",
      "swipeRisk": "Раптовий продаж після емоції.",
      "repair": "Побутова банка вже знайома, голос теж.",
      "attention": {
        "knowsBefore": "Мати лишилася в кадрі й дозволила учениці діяти.",
        "invitedFeeling": "Спокійна ясність наступного кроку; без дефіциту й примусу.",
        "getsNow": "Продукт названий повністю.",
        "expectsNext": "Для чого він і куди перейти?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED044"
    },
    {
      "id": "EV071",
      "sceneId": "NS07",
      "shotId": "NSH052",
      "start": 139.5,
      "end": 141.5,
      "lineId": "NL046",
      "words": "крем для шиї та декольте.",
      "mode": "voiceover",
      "picture": "Той самий held packshot; жодних обіцянок зникнення складок.",
      "edit": "Утримання дає час прочитати етикетку; без нового cut заради ритму.",
      "change": "Зона й категорія зрозумілі.",
      "wantAnswered": "Де перевірити склад та умови?",
      "payoff": "NL047",
      "swipeRisk": "Беззмістовна затримка пакшота.",
      "repair": "П’ять секунд цілого продуктового речення, поділені лише для плану.",
      "attention": {
        "knowsBefore": "Продукт названий повністю.",
        "invitedFeeling": "Спокійна ясність наступного кроку; без дефіциту й примусу.",
        "getsNow": "Зона й категорія зрозумілі.",
        "expectsNext": "Де перевірити склад та умови?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED044"
    },
    {
      "id": "EV072",
      "sceneId": "NS07",
      "shotId": "NSH053",
      "start": 141.5,
      "end": 144.0,
      "lineId": "NL047",
      "words": "Склад і умови — за посиланням.",
      "mode": "voiceover",
      "picture": "Фінальна картка: «Склад та умови → за посиланням». Банка справа; назва goPure зверху.",
      "edit": "Прямий cut без спалаху; CTA з’являється один раз.",
      "change": "Є інформаційний шлях, а не вигадана гарантія.",
      "wantAnswered": "Яка дія у формі?",
      "payoff": "NL047",
      "swipeRisk": "Нечіткий «дізнатись більше».",
      "repair": "Одразу названо і перевірку умов, і наступний крок.",
      "attention": {
        "knowsBefore": "Зона й категорія зрозумілі.",
        "invitedFeeling": "Спокійна ясність наступного кроку; без дефіциту й примусу.",
        "getsNow": "Є інформаційний шлях, а не вигадана гарантія.",
        "expectsNext": "Яка дія у формі?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED045"
    },
    {
      "id": "EV073",
      "sceneId": "NS07",
      "shotId": "NSH053",
      "start": 144.0,
      "end": 146.5,
      "lineId": "NL047",
      "words": "Залиште номер для замовлення.",
      "mode": "voiceover",
      "picture": "На тій самій картці другий рядок «Залиште номер». Не показувати справжній номер людини.",
      "edit": "Зміна текстового акценту у пості; не новий відеошот.",
      "change": "Зрозуміло, що це телефонна заявка.",
      "wantAnswered": "Яка форма оплати заявлена?",
      "payoff": "NL048",
      "swipeRisk": "Схоже на оплату карткою.",
      "repair": "Іконка телефона і ясний дієслівний крок без checkout.",
      "attention": {
        "knowsBefore": "Є інформаційний шлях, а не вигадана гарантія.",
        "invitedFeeling": "Спокійна ясність наступного кроку; без дефіциту й примусу.",
        "getsNow": "Зрозуміло, що це телефонна заявка.",
        "expectsNext": "Яка форма оплати заявлена?"
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED045"
    },
    {
      "id": "EV074",
      "sceneId": "NS07",
      "shotId": "NSH053",
      "start": 146.5,
      "end": 149.5,
      "lineId": "NL048",
      "words": "За умовами продавця, оплата — при отриманні.",
      "mode": "voiceover",
      "picture": "Картка лишається; дрібніший, але читабельний рядок «Драматизація. Результати індивідуальні». Без ціни, countdown і знижки.",
      "edit": "Закінчити голос до hold; умову переперевірити перед release.",
      "change": "Локальна оплата названа із джерелом; індивідуальний результат не гарантований.",
      "wantAnswered": "Є час натиснути чи перечитати.",
      "payoff": "FINAL",
      "swipeRisk": "Вигадана незалежна гарантія сервісу.",
      "repair": "Вголос «за умовами продавця»; не стверджуємо перевірену доставку.",
      "attention": {
        "knowsBefore": "Зрозуміло, що це телефонна заявка.",
        "invitedFeeling": "Спокійна ясність наступного кроку; без дефіциту й примусу.",
        "getsNow": "Локальна оплата названа із джерелом; індивідуальний результат не гарантований.",
        "expectsNext": "Є час натиснути чи перечитати."
      },
      "voiceOwner": "OL",
      "mouthRule": "Жоден видимий рот не артикулює цю репліку. Власник голосу збережений; без додаткових слів.",
      "setupId": "ED045"
    },
    {
      "id": "EV075",
      "sceneId": "NS07",
      "shotId": "NSH053",
      "start": 149.5,
      "end": 152.0,
      "lineId": null,
      "words": "",
      "mode": "silence",
      "picture": "Фінальна картка без змін, усі рядки лишаються читабельними.",
      "edit": "Чистий тихий хвіст після завершення VO; без нового музичного стинґа.",
      "change": "Комерційний крок доступний після останнього слова.",
      "wantAnswered": "Перехід добровільний.",
      "payoff": "FINAL",
      "swipeRisk": "Картка зникає раніше читання.",
      "repair": "2.5 секунди чистого hold після голосу.",
      "attention": {
        "knowsBefore": "Локальна оплата названа із джерелом; індивідуальний результат не гарантований.",
        "invitedFeeling": "Спокійна ясність наступного кроку; без дефіциту й примусу.",
        "getsNow": "Комерційний крок доступний після останнього слова.",
        "expectsNext": "Перехід добровільний."
      },
      "voiceOwner": null,
      "mouthRule": "Лексичної репліки немає; без згенерованих вигуків чи фонового діалогу.",
      "setupId": "ED045"
    }
  ],
  "editorialShots": [
    {
      "id": "NSH001",
      "setupId": "ED001",
      "sceneId": "NS01",
      "start": 0.0,
      "end": 2.5,
      "eventIds": [
        "EV001"
      ]
    },
    {
      "id": "NSH002",
      "setupId": "ED002",
      "sceneId": "NS01",
      "start": 2.5,
      "end": 3.5,
      "eventIds": [
        "EV002"
      ]
    },
    {
      "id": "NSH003",
      "setupId": "ED003",
      "sceneId": "NS01",
      "start": 3.5,
      "end": 7.5,
      "eventIds": [
        "EV003",
        "EV004"
      ]
    },
    {
      "id": "NSH004",
      "setupId": "ED004",
      "sceneId": "NS01",
      "start": 7.5,
      "end": 10.5,
      "eventIds": [
        "EV005",
        "EV006"
      ]
    },
    {
      "id": "NSH005",
      "setupId": "ED005",
      "sceneId": "NS01",
      "start": 10.5,
      "end": 16.0,
      "eventIds": [
        "EV007",
        "EV008",
        "EV009"
      ]
    },
    {
      "id": "NSH006",
      "setupId": "ED006",
      "sceneId": "NS01",
      "start": 16.0,
      "end": 17.0,
      "eventIds": [
        "EV010"
      ]
    },
    {
      "id": "NSH007",
      "setupId": "ED007",
      "sceneId": "NS01",
      "start": 17.0,
      "end": 19.0,
      "eventIds": [
        "EV011"
      ]
    },
    {
      "id": "NSH008",
      "setupId": "ED008",
      "sceneId": "NS01",
      "start": 19.0,
      "end": 22.0,
      "eventIds": [
        "EV012"
      ]
    },
    {
      "id": "NSH009",
      "setupId": "ED007",
      "sceneId": "NS01",
      "start": 22.0,
      "end": 24.0,
      "eventIds": [
        "EV013"
      ]
    },
    {
      "id": "NSH010",
      "setupId": "ED009",
      "sceneId": "NS01",
      "start": 24.0,
      "end": 26.5,
      "eventIds": [
        "EV014"
      ]
    },
    {
      "id": "NSH011",
      "setupId": "ED010",
      "sceneId": "NS01",
      "start": 26.5,
      "end": 30.5,
      "eventIds": [
        "EV015",
        "EV016"
      ]
    },
    {
      "id": "NSH012",
      "setupId": "ED011",
      "sceneId": "NS02",
      "start": 30.5,
      "end": 33.0,
      "eventIds": [
        "EV017"
      ]
    },
    {
      "id": "NSH013",
      "setupId": "ED012",
      "sceneId": "NS02",
      "start": 33.0,
      "end": 37.5,
      "eventIds": [
        "EV018",
        "EV019"
      ]
    },
    {
      "id": "NSH014",
      "setupId": "ED013",
      "sceneId": "NS02",
      "start": 37.5,
      "end": 39.5,
      "eventIds": [
        "EV020"
      ]
    },
    {
      "id": "NSH015",
      "setupId": "ED014",
      "sceneId": "NS02",
      "start": 39.5,
      "end": 41.0,
      "eventIds": [
        "EV021"
      ]
    },
    {
      "id": "NSH016",
      "setupId": "ED012",
      "sceneId": "NS02",
      "start": 41.0,
      "end": 44.0,
      "eventIds": [
        "EV022"
      ]
    },
    {
      "id": "NSH017",
      "setupId": "ED015",
      "sceneId": "NS02",
      "start": 44.0,
      "end": 46.5,
      "eventIds": [
        "EV023"
      ]
    },
    {
      "id": "NSH018",
      "setupId": "ED016",
      "sceneId": "NS02",
      "start": 46.5,
      "end": 48.5,
      "eventIds": [
        "EV024"
      ]
    },
    {
      "id": "NSH019",
      "setupId": "ED014",
      "sceneId": "NS02",
      "start": 48.5,
      "end": 52.5,
      "eventIds": [
        "EV025",
        "EV026"
      ]
    },
    {
      "id": "NSH020",
      "setupId": "ED015",
      "sceneId": "NS02",
      "start": 52.5,
      "end": 55.5,
      "eventIds": [
        "EV027"
      ]
    },
    {
      "id": "NSH021",
      "setupId": "ED016",
      "sceneId": "NS02",
      "start": 55.5,
      "end": 57.0,
      "eventIds": [
        "EV028"
      ]
    },
    {
      "id": "NSH022",
      "setupId": "ED014",
      "sceneId": "NS02",
      "start": 57.0,
      "end": 58.0,
      "eventIds": [
        "EV029"
      ]
    },
    {
      "id": "NSH023",
      "setupId": "ED015",
      "sceneId": "NS02",
      "start": 58.0,
      "end": 60.5,
      "eventIds": [
        "EV030"
      ]
    },
    {
      "id": "NSH024",
      "setupId": "ED017",
      "sceneId": "NS02",
      "start": 60.5,
      "end": 63.5,
      "eventIds": [
        "EV031"
      ]
    },
    {
      "id": "NSH025",
      "setupId": "ED018",
      "sceneId": "NS03",
      "start": 63.5,
      "end": 66.0,
      "eventIds": [
        "EV032"
      ]
    },
    {
      "id": "NSH026",
      "setupId": "ED019",
      "sceneId": "NS03",
      "start": 66.0,
      "end": 68.0,
      "eventIds": [
        "EV033"
      ]
    },
    {
      "id": "NSH027",
      "setupId": "ED020",
      "sceneId": "NS03",
      "start": 68.0,
      "end": 74.0,
      "eventIds": [
        "EV034",
        "EV035",
        "EV036"
      ]
    },
    {
      "id": "NSH028",
      "setupId": "ED021",
      "sceneId": "NS04",
      "start": 74.0,
      "end": 76.5,
      "eventIds": [
        "EV037"
      ]
    },
    {
      "id": "NSH029",
      "setupId": "ED022",
      "sceneId": "NS04",
      "start": 76.5,
      "end": 79.0,
      "eventIds": [
        "EV038"
      ]
    },
    {
      "id": "NSH030",
      "setupId": "ED023",
      "sceneId": "NS04",
      "start": 79.0,
      "end": 81.5,
      "eventIds": [
        "EV039"
      ]
    },
    {
      "id": "NSH031",
      "setupId": "ED024",
      "sceneId": "NS04",
      "start": 81.5,
      "end": 83.5,
      "eventIds": [
        "EV040"
      ]
    },
    {
      "id": "NSH032",
      "setupId": "ED025",
      "sceneId": "NS04",
      "start": 83.5,
      "end": 86.5,
      "eventIds": [
        "EV041"
      ]
    },
    {
      "id": "NSH033",
      "setupId": "ED026",
      "sceneId": "NS04",
      "start": 86.5,
      "end": 88.5,
      "eventIds": [
        "EV042"
      ]
    },
    {
      "id": "NSH034",
      "setupId": "ED027",
      "sceneId": "NS04",
      "start": 88.5,
      "end": 90.0,
      "eventIds": [
        "EV043"
      ]
    },
    {
      "id": "NSH035",
      "setupId": "ED028",
      "sceneId": "NS04",
      "start": 90.0,
      "end": 91.5,
      "eventIds": [
        "EV044"
      ]
    },
    {
      "id": "NSH036",
      "setupId": "ED029",
      "sceneId": "NS04",
      "start": 91.5,
      "end": 94.0,
      "eventIds": [
        "EV045"
      ]
    },
    {
      "id": "NSH037",
      "setupId": "ED030",
      "sceneId": "NS04",
      "start": 94.0,
      "end": 96.0,
      "eventIds": [
        "EV046"
      ]
    },
    {
      "id": "NSH038",
      "setupId": "ED031",
      "sceneId": "NS05",
      "start": 96.0,
      "end": 98.0,
      "eventIds": [
        "EV047"
      ]
    },
    {
      "id": "NSH039",
      "setupId": "ED032",
      "sceneId": "NS05",
      "start": 98.0,
      "end": 99.0,
      "eventIds": [
        "EV048"
      ]
    },
    {
      "id": "NSH040",
      "setupId": "ED033",
      "sceneId": "NS05",
      "start": 99.0,
      "end": 103.0,
      "eventIds": [
        "EV049",
        "EV050"
      ]
    },
    {
      "id": "NSH041",
      "setupId": "ED034",
      "sceneId": "NS05",
      "start": 103.0,
      "end": 107.0,
      "eventIds": [
        "EV051",
        "EV052"
      ]
    },
    {
      "id": "NSH042",
      "setupId": "ED035",
      "sceneId": "NS05",
      "start": 107.0,
      "end": 109.5,
      "eventIds": [
        "EV053"
      ]
    },
    {
      "id": "NSH043",
      "setupId": "ED036",
      "sceneId": "NS05",
      "start": 109.5,
      "end": 113.5,
      "eventIds": [
        "EV054",
        "EV055",
        "EV056"
      ]
    },
    {
      "id": "NSH044",
      "setupId": "ED037",
      "sceneId": "NS06",
      "start": 113.5,
      "end": 115.5,
      "eventIds": [
        "EV057"
      ]
    },
    {
      "id": "NSH045",
      "setupId": "ED038",
      "sceneId": "NS06",
      "start": 115.5,
      "end": 119.5,
      "eventIds": [
        "EV058",
        "EV059"
      ]
    },
    {
      "id": "NSH046",
      "setupId": "ED039",
      "sceneId": "NS06",
      "start": 119.5,
      "end": 120.5,
      "eventIds": [
        "EV060"
      ]
    },
    {
      "id": "NSH047",
      "setupId": "ED040",
      "sceneId": "NS06",
      "start": 120.5,
      "end": 125.0,
      "eventIds": [
        "EV061",
        "EV062"
      ]
    },
    {
      "id": "NSH048",
      "setupId": "ED039",
      "sceneId": "NS06",
      "start": 125.0,
      "end": 126.0,
      "eventIds": [
        "EV063"
      ]
    },
    {
      "id": "NSH049",
      "setupId": "ED041",
      "sceneId": "NS06",
      "start": 126.0,
      "end": 128.5,
      "eventIds": [
        "EV064"
      ]
    },
    {
      "id": "NSH050",
      "setupId": "ED042",
      "sceneId": "NS06",
      "start": 128.5,
      "end": 133.0,
      "eventIds": [
        "EV065",
        "EV066",
        "EV067"
      ]
    },
    {
      "id": "NSH051",
      "setupId": "ED043",
      "sceneId": "NS06",
      "start": 133.0,
      "end": 136.5,
      "eventIds": [
        "EV068",
        "EV069"
      ]
    },
    {
      "id": "NSH052",
      "setupId": "ED044",
      "sceneId": "NS07",
      "start": 136.5,
      "end": 141.5,
      "eventIds": [
        "EV070",
        "EV071"
      ]
    },
    {
      "id": "NSH053",
      "setupId": "ED045",
      "sceneId": "NS07",
      "start": 141.5,
      "end": 152.0,
      "eventIds": [
        "EV072",
        "EV073",
        "EV074",
        "EV075"
      ]
    }
  ],
  "craft": [
    {
      "id": "MAP01",
      "sourceEventIds": [
        "E0001",
        "E0002",
        "E0003",
        "E0004",
        "E0005"
      ],
      "passportIds": {
        "characters": [
          "OL",
          "IR"
        ],
        "locations": [
          "LOC-ATELIER"
        ],
        "problem": [
          "PROBLEM-OL-NECK"
        ],
        "props": [
          "PROP-LAPTOP",
          "PROP-STITCH"
        ],
        "voices": [
          "VOICE-OL",
          "VOICE-IR"
        ]
      },
      "implementationArtifact": "analysis/gopure-free-narrative/proposal.json",
      "result": "Авторський задум; реального нового AV немає. Свіжий AV-перегляд джерела очікує відновлення доступу провайдера.",
      "sourceShots": [
        "SH001",
        "SH002"
      ],
      "sourceScenes": [
        "S01"
      ],
      "start": 0,
      "end": 3.77,
      "quote": "Your blood pressure is 161 over 98. / That high?",
      "observation": "Лікар читає документ, не встановлює новий прямий погляд у вічі; сім’я перед ним. Коротка відповідь батька в окремому крупному плані.",
      "mechanism": "Конкретний факт спочатку; адресат сам озвучує занепокоєння. Довжини реплік різні, реакція не дублює цифру.",
      "implementation": [
        "NL001",
        "NL002",
        "EV001",
        "EV002"
      ],
      "reason": "Замість медичної загрози — конкретна монтажна втрата, доступна косметичній категорії без неправдивої еквівалентності.",
      "limits": "Це рекламна медична сцена джерела; її числа не доводять ефективності Resilia і не переходять до goPure.",
      "packets": [
        {
          "id": "SH001",
          "video": {
            "path": "analysis/resilia-dna/packets/SH001/video.mp4",
            "sha256": "af6ccd1d4ca9067df0a5b5cb4f05da63c8bcbe4fff4b2e251e7c9120c0b64bf5",
            "bytes": 148960,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "0.000000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.733333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH001/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH001/audio.mp3",
            "sha256": "1ece56eb46c2e7335e5b94c7c71ed3b8b17fd6844dbf108ff2e3d76272b58361",
            "bytes": 33689
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH001/sheet.jpg",
            "sha256": "a6e7aa86beb0c1be1d26b5613a9f94ecbdf9f85e0b7c942b7bff6276660d96fe",
            "bytes": 206334,
            "nativeFrameIndices": [
              0,
              6,
              12,
              18,
              24,
              30,
              36,
              40,
              42,
              48,
              54,
              60,
              66,
              72,
              78,
              81
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH002",
          "video": {
            "path": "analysis/resilia-dna/packets/SH002/video.mp4",
            "sha256": "2b050f4ff96041e29c3c312d9a284b032a5820d9c31e85076030dbb8069c153b",
            "bytes": 50871,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "2.733333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.033334",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH002/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH002/audio.mp3",
            "sha256": "953f07c423bcd88b0c8bcb487743ed7de8465bede24313dcaacfc16d59db6daf",
            "bytes": 13313
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH002/sheet.jpg",
            "sha256": "ec2d3ab4e113a34784d5937572eb648ffd77a738322177c0713db0638aa0ebf2",
            "bytes": 91596,
            "nativeFrameIndices": [
              82,
              88,
              94,
              97,
              100,
              106,
              112
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        }
      ]
    },
    {
      "id": "MAP02",
      "sourceEventIds": [
        "E0031",
        "E0032",
        "E0033",
        "E0034",
        "E0035",
        "E0036",
        "E0037",
        "E0038",
        "E0039",
        "E0040",
        "E0041",
        "E0042",
        "E0043",
        "E0044",
        "E0045",
        "E0046",
        "E0047",
        "E0048"
      ],
      "passportIds": {
        "characters": [
          "OL",
          "IR"
        ],
        "locations": [
          "LOC-ATELIER"
        ],
        "problem": [
          "PROBLEM-OL-NECK"
        ],
        "props": [
          "PROP-SCARF",
          "PROP-LAPTOP"
        ],
        "voices": [
          "VOICE-OL",
          "VOICE-IR"
        ]
      },
      "implementationArtifact": "analysis/gopure-free-narrative/proposal.json",
      "result": "Авторський задум; реального нового AV немає. Свіжий AV-перегляд джерела очікує відновлення доступу провайдера.",
      "sourceShots": [
        "SH011",
        "SH012",
        "SH013",
        "SH014",
        "SH015"
      ],
      "sourceScenes": [
        "S02"
      ],
      "start": 21,
      "end": 28.53,
      "quote": "You're gonna be okay, right? / Yeah, baby. / I'm gonna be fine.",
      "observation": "Донька слухає; частина відповіді батька звучить над її обличчям, потім з’являється вставка рук на кермі. Заспокоєння не супроводжується показаним доказом безпеки.",
      "mechanism": "Слова обіцяють спокій, слухач лишає питання відкритим; не треба вигадувати новий жест кожної секунди.",
      "implementation": [
        "NL007",
        "NL008",
        "ED005"
      ],
      "reason": "Мати лишається суб’єктом власної потреби: доньчине «ніхто» буквально отримує відповідь «я».",
      "limits": "Не стверджуємо «донька не кліпає» або точне стискання керма. Тон і сумнів — інтерпретація видимого/чутного.",
      "packets": [
        {
          "id": "SH011",
          "video": {
            "path": "analysis/resilia-dna/packets/SH011/video.mp4",
            "sha256": "1259fa663494a5e836ba16ba7c5a8593abe2e9cc7b55532eb5625f6e341d874a",
            "bytes": 140368,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "20.866667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.033333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH011/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH011/audio.mp3",
            "sha256": "167368a5a3932663b1ebbbe1d9fbf0652e14619a7744420d42c987d94b5c8e1c",
            "bytes": 25225
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH011/sheet.jpg",
            "sha256": "d93671657c5a38a77d62be3f90526695033276cf3a79e46698bba1c002e85c12",
            "bytes": 150628,
            "nativeFrameIndices": [
              626,
              632,
              638,
              644,
              650,
              656,
              662,
              668,
              674,
              680,
              686
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH012",
          "video": {
            "path": "analysis/resilia-dna/packets/SH012/video.mp4",
            "sha256": "4c716ad98447f47adea0615af6f99b462a9b3ed70dd837a124005e3ba576f61d",
            "bytes": 76320,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "22.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.200000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH012/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH012/audio.mp3",
            "sha256": "a2802d90ca34405b5ec6565be5356458cbf9b3d57f8e23532d94529cedc69a7e",
            "bytes": 15194
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH012/sheet.jpg",
            "sha256": "cfe5d3e8f1134720a3667ee9e213ad1a137860b896b2a82491cb0a160968de25",
            "bytes": 103473,
            "nativeFrameIndices": [
              687,
              693,
              699,
              704,
              705,
              711,
              717,
              722
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH013",
          "video": {
            "path": "analysis/resilia-dna/packets/SH013/video.mp4",
            "sha256": "224bfa88cd306ed767a2abe1d9a159932e793158fee2e563717b9007bd615ee2",
            "bytes": 79532,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "24.100000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.433333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH013/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH013/audio.mp3",
            "sha256": "fb06fba843ac5fe9244462960ee1da8c680efa674a2e5fc6f6027121a61294e2",
            "bytes": 18015
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH013/sheet.jpg",
            "sha256": "14a50a917933f5f293d2e48e923aceecc6d220ec7931ef765d87d5dc197bff0e",
            "bytes": 117610,
            "nativeFrameIndices": [
              723,
              729,
              735,
              741,
              744,
              747,
              753,
              759,
              765
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH014",
          "video": {
            "path": "analysis/resilia-dna/packets/SH014/video.mp4",
            "sha256": "d8b6ab32265deedc706bb53fc6f9814fabd2300aa14e8349e13b1a842885f3af",
            "bytes": 99450,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "25.533333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.566667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH014/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH014/audio.mp3",
            "sha256": "e78879460747e8b57fd6d0bb96e863df13f5f3a0b5d9d5233143865f49216dd5",
            "bytes": 19583
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH014/sheet.jpg",
            "sha256": "6d9b1316766677609b86260b6c012bf84f8d494df2372328840d2a916eb12fbf",
            "bytes": 131535,
            "nativeFrameIndices": [
              766,
              772,
              778,
              784,
              789,
              790,
              796,
              802,
              808,
              812
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH015",
          "video": {
            "path": "analysis/resilia-dna/packets/SH015/video.mp4",
            "sha256": "c17a1fb32f982a1ed50f065860448de0723a0a6dc8f68c2cb503ada0bb2d9063",
            "bytes": 78949,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "27.100000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.433333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH015/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH015/audio.mp3",
            "sha256": "6e4d0d74c362adb8653b82b74afd740478b6572c907d6456c2f1cd7c5381eccf",
            "bytes": 18015
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH015/sheet.jpg",
            "sha256": "9fda32b117d22a99955bf62595c47cabc4d83f8a659721a9a44ff4984bb28e90",
            "bytes": 100978,
            "nativeFrameIndices": [
              813,
              819,
              825,
              831,
              834,
              837,
              843,
              849,
              855
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        }
      ]
    },
    {
      "id": "MAP03",
      "sourceEventIds": [
        "E0069",
        "E0070",
        "E0071",
        "E0072",
        "E0073",
        "E0074",
        "E0075",
        "E0076",
        "E0077",
        "E0078",
        "E0079",
        "E0080",
        "E0081",
        "E0082",
        "E0083",
        "E0084",
        "E0085",
        "E0427"
      ],
      "passportIds": {
        "characters": [
          "OL",
          "IR"
        ],
        "locations": [
          "LOC-ATELIER",
          "LOC-HOME"
        ],
        "problem": [
          "PROBLEM-OL-NECK"
        ],
        "props": [
          "PROP-STITCH",
          "PROP-PROGRAM"
        ],
        "voices": [
          "VOICE-OL",
          "VOICE-IR"
        ]
      },
      "implementationArtifact": "analysis/gopure-free-narrative/proposal.json",
      "result": "Авторський задум; реального нового AV немає. Свіжий AV-перегляд джерела очікує відновлення доступу провайдера.",
      "sourceShots": [
        "SH024",
        "SH025",
        "SH026",
        "SH027",
        "SH028"
      ],
      "sourceScenes": [
        "S04"
      ],
      "start": 43.9,
      "end": 54.63,
      "quote": "[переважно без лексичної репліки]",
      "observation": "Дитина виходить із дому, іде темною вулицею з рожевим планшетом і приходить до дверей. Закінчене закривання домашніх дверей не показане.",
      "mechanism": "Пошук отримує фізичну ціну, яка потім надає вагу подяці; дії роблять більше за пояснення мотиву.",
      "implementation": [
        "NL011",
        "NL012",
        "ED010",
        "NL026"
      ],
      "reason": "Ціна нової героїні — власні гроші/час/повторний шов. Нічна небезпека для дитини тут не потрібна.",
      "limits": "Не переносимо ризиковану дитячу подорож або її моральне виправдання в косметичний сюжет.",
      "packets": [
        {
          "id": "SH024",
          "video": {
            "path": "analysis/resilia-dna/packets/SH024/video.mp4",
            "sha256": "16f07ac08a0827da1f951c2dacad62038cd2d2a9cf5660520972943997ed8eca",
            "bytes": 126648,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "43.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.700000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH024/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH024/audio.mp3",
            "sha256": "d8ec3a4e067420b051696f06bf4aa9c868417739f539d60a9a757d074cbbf108",
            "bytes": 21463
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH024/sheet.jpg",
            "sha256": "47d6ca2081e5ba82027d454079f1ed068f897a869bdd4956c28b32b43d1dab73",
            "bytes": 100243,
            "nativeFrameIndices": [
              1317,
              1323,
              1329,
              1335,
              1341,
              1342,
              1347,
              1353,
              1359,
              1365,
              1367
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH025",
          "video": {
            "path": "analysis/resilia-dna/packets/SH025-v2/video.mp4",
            "sha256": "078ec13d9f71ad1a1b50483953fe34b9c43ae657645f3272f50b414c172cc9fb",
            "bytes": 87954,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "45.600000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.933333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH025-v2/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH025-v2/audio.mp3",
            "sha256": "8f30942e95087e0c92ef525b86fc977a369cb4ccad1d0440b11c55c9fcf37cfd",
            "bytes": 36197
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH025-v2/sheet.jpg",
            "sha256": "014e137f38f43d57bedc0b26447fbd56ad006e3ec97bb208df44dd5488ea51bd",
            "bytes": 156028,
            "nativeFrameIndices": [
              1368,
              1374,
              1380,
              1386,
              1392,
              1398,
              1404,
              1410,
              1411,
              1416,
              1422,
              1428,
              1434,
              1440,
              1446,
              1452,
              1455
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH026",
          "video": {
            "path": "analysis/resilia-dna/packets/SH026-v2/video.mp4",
            "sha256": "3d4abba871891641564429c9ec8220d44b4ff3698c0e9243d44f60b27cab0a53",
            "bytes": 194014,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "48.533333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.566667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH026-v2/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH026-v2/audio.mp3",
            "sha256": "4a1b433e6ffd2a7b776d3f22d1fa871c30c6002b1c43c67ce0677b3363b66014",
            "bytes": 31808
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH026-v2/sheet.jpg",
            "sha256": "2567a1115b945c05571f0aed7844579086c4a988bd52aa91c75f3b7f16308ef3",
            "bytes": 168675,
            "nativeFrameIndices": [
              1456,
              1462,
              1468,
              1474,
              1480,
              1486,
              1492,
              1494,
              1498,
              1504,
              1510,
              1516,
              1522,
              1528,
              1532
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH027",
          "video": {
            "path": "analysis/resilia-dna/packets/SH027/video.mp4",
            "sha256": "734a54302c27d0e6f10ce4b8059e2e45f4b7fe1b8495362b3470a99b94c1e600",
            "bytes": 94691,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "51.100000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.800000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH027/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH027/audio.mp3",
            "sha256": "67a77ab4dc0e8e5ce0b08d0f023b3b07fa74e6803389170c0f3e10323726ef0d",
            "bytes": 22404
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH027/sheet.jpg",
            "sha256": "e2bb3d8be1f17f9ed08722428f775f3d2cde491abc2f8e5f19857d6b5bc1bd67",
            "bytes": 151396,
            "nativeFrameIndices": [
              1533,
              1539,
              1545,
              1551,
              1557,
              1559,
              1563,
              1569,
              1575,
              1581,
              1586
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH028",
          "video": {
            "path": "analysis/resilia-dna/packets/SH028/video.mp4",
            "sha256": "f5f68bbf45a04fe40d885805dc1ea28f0ab16432dd0aada51f55f3174ba40f13",
            "bytes": 76565,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "52.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.733333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH028/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH028/audio.mp3",
            "sha256": "fd7157594bbe24fcbbb71cf7da3c55eac2dc2e5f40e3a83972b3d9aef7d369f6",
            "bytes": 21777
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH028/sheet.jpg",
            "sha256": "617e37dc97418a3261f0cfa07e195c9ac1011b27ce72d26088eabea4fbeb4d0a",
            "bytes": 129476,
            "nativeFrameIndices": [
              1587,
              1593,
              1599,
              1605,
              1611,
              1612,
              1617,
              1623,
              1629,
              1635,
              1638
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        }
      ]
    },
    {
      "id": "MAP04",
      "sourceEventIds": [
        "E0223",
        "E0224",
        "E0225",
        "E0226",
        "E0227",
        "E0228",
        "E0229",
        "E0230",
        "E0240",
        "E0241",
        "E0242",
        "E0243",
        "E0244",
        "E0245",
        "E0246",
        "E0247",
        "E0248",
        "E0262",
        "E0263"
      ],
      "passportIds": {
        "characters": [
          "OL",
          "LA"
        ],
        "locations": [
          "LOC-ATELIER"
        ],
        "problem": [
          "PROBLEM-OL-NECK"
        ],
        "props": [
          "PROP-JAR-LA"
        ],
        "voices": [
          "VOICE-OL",
          "VOICE-LA"
        ]
      },
      "implementationArtifact": "analysis/gopure-free-narrative/proposal.json",
      "result": "Авторський задум; реального нового AV немає. Свіжий AV-перегляд джерела очікує відновлення доступу провайдера.",
      "sourceShots": [
        "SH063",
        "SH064",
        "SH070",
        "SH071",
        "SH072"
      ],
      "sourceScenes": [
        "S09"
      ],
      "start": 164.5,
      "end": 204,
      "quote": "I appreciate it, but I’ve got garlic in the kitchen. / What’s the difference? / And you take this yourself? / How do I know it’s the real thing?",
      "observation": "Батько тримає продукт і послідовно змінює тип запиту: категорійна відмінність, власний досвід порадника, достовірність. Показаний батько може слухати старшого чоловіка за кадром.",
      "mechanism": "Пояснення має право на довжину лише поки відповідає актуальному запереченню. Зміна адресата важливіша за список інгредієнтів.",
      "implementation": [
        "NL019",
        "NL020",
        "NL021",
        "NL022",
        "NL023"
      ],
      "reason": "Мати перевіряє зникнення складок і строк до зйомки; відповідь чесно обмежує обидва й дає просту рутину.",
      "limits": "Фрази оригіналу про очищення артерій, фейки й перевагу добавки не переймаємо. Джерело демонструє рекламні твердження, не незалежний доказ.",
      "packets": [
        {
          "id": "SH063",
          "video": {
            "path": "analysis/resilia-dna/packets/SH063/video.mp4",
            "sha256": "ddfd8ef0bc345a16fc79b3f1a183bd7b8bdb2692b505938002cc1f5e40c0cbb3",
            "bytes": 286756,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "163.966667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "5.400000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH063/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH063/audio.mp3",
            "sha256": "d7ef99394759e2edb8012e1632e4efba0e36a2556564f73d69bcc63aeaf6e963",
            "bytes": 65663
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH063/sheet.jpg",
            "sha256": "8edde190fb84682ea52ea28871bb0072583e026018bbeaba6bee9eb8e1bcaa82",
            "bytes": 379016,
            "nativeFrameIndices": [
              4919,
              4925,
              4931,
              4937,
              4943,
              4949,
              4955,
              4961,
              4967,
              4973,
              4979,
              4985,
              4991,
              4997,
              4999,
              5003,
              5009,
              5015,
              5021,
              5027,
              5033,
              5039,
              5045,
              5051,
              5057,
              5063,
              5069,
              5075,
              5080
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH064",
          "video": {
            "path": "analysis/resilia-dna/packets/SH064/video.mp4",
            "sha256": "4a5b4bee1829f382a3fcee5eb5effe93613ee851d81ac7eaec16dab31ee420f7",
            "bytes": 99398,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "169.366667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.033333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH064/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH064/audio.mp3",
            "sha256": "adf1873d6494adbb6e31bc4ac34812c6873b30fbb5246e6f3110245db20b5670",
            "bytes": 25225
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH064/sheet.jpg",
            "sha256": "003cba05da57239a66f7c1801f857f42c5e8158b3696c6f710b353554970088e",
            "bytes": 143597,
            "nativeFrameIndices": [
              5081,
              5087,
              5093,
              5099,
              5105,
              5111,
              5117,
              5123,
              5129,
              5135,
              5141
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH070",
          "video": {
            "path": "analysis/resilia-dna/packets/SH070/video.mp4",
            "sha256": "f0c0dcd5468e819485114909ee35d44000e1fe7d5946952835b6fec04e3c8fd2",
            "bytes": 182568,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "191.333333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "3.600000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH070/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH070/audio.mp3",
            "sha256": "e5161e82c5af76a3d745dc1ab0941cc631669ea186fd844b622bfe60edbcf18c",
            "bytes": 44033
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH070/sheet.jpg",
            "sha256": "b5478e650a180e462679f02e60963db01260f3eb09516febe64d1ad43eced8b2",
            "bytes": 277060,
            "nativeFrameIndices": [
              5740,
              5746,
              5752,
              5758,
              5764,
              5770,
              5776,
              5782,
              5788,
              5793,
              5794,
              5800,
              5806,
              5812,
              5818,
              5824,
              5830,
              5836,
              5842,
              5847
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH071",
          "video": {
            "path": "analysis/resilia-dna/packets/SH071/video.mp4",
            "sha256": "d695256a1351e6a662cea54e43e56eda9cb2e7a61a8f201f19342503c7d7d01c",
            "bytes": 185130,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "194.933333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "4.233334",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH071/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH071/audio.mp3",
            "sha256": "ddca4f5eb8f7a7b82d668432970ba8ab0360fb5c47dc7fc8660406bdce22a97a",
            "bytes": 51870
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH071/sheet.jpg",
            "sha256": "20f017666c64989d721f7e22d082e6fa6c84b25e58333d887242331863db4ae9",
            "bytes": 289157,
            "nativeFrameIndices": [
              5848,
              5854,
              5860,
              5866,
              5872,
              5878,
              5884,
              5890,
              5896,
              5902,
              5908,
              5911,
              5914,
              5920,
              5926,
              5932,
              5938,
              5944,
              5950,
              5956,
              5962,
              5968,
              5974
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH072",
          "video": {
            "path": "analysis/resilia-dna/packets/SH072/video.mp4",
            "sha256": "b10c32562397c791c4cc1ba3b7d248915f772253983f269948336983b1df5c78",
            "bytes": 188288,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "199.166667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "3.633333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH072/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH072/audio.mp3",
            "sha256": "d28b412cd158084b009f75f7d8bcc4c226455e17a7c24492907380918b32cbdd",
            "bytes": 44660
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH072/sheet.jpg",
            "sha256": "ac502165368c8ef2dcedc87aece0832938b93519a1d80d76c2c5ad44382b68f9",
            "bytes": 243858,
            "nativeFrameIndices": [
              5975,
              5981,
              5987,
              5993,
              5999,
              6005,
              6011,
              6017,
              6023,
              6029,
              6035,
              6041,
              6047,
              6053,
              6059,
              6065,
              6071,
              6077,
              6083
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        }
      ]
    },
    {
      "id": "MAP05",
      "sourceEventIds": [
        "E0286",
        "E0287",
        "E0288",
        "E0289",
        "E0290",
        "E0291",
        "E0292",
        "E0293",
        "E0294",
        "E0295",
        "E0296",
        "E0297",
        "E0298",
        "E0310"
      ],
      "passportIds": {
        "characters": [
          "OL",
          "LA"
        ],
        "locations": [
          "LOC-ATELIER"
        ],
        "problem": [
          "PROBLEM-OL-NECK"
        ],
        "props": [
          "PROP-JAR-LA",
          "PROP-JAR-OL"
        ],
        "voices": [
          "VOICE-OL",
          "VOICE-LA"
        ]
      },
      "implementationArtifact": "analysis/gopure-free-narrative/proposal.json",
      "result": "Авторський задум; реального нового AV немає. Свіжий AV-перегляд джерела очікує відновлення доступу провайдера.",
      "sourceShots": [
        "SH082",
        "SH083",
        "SH084",
        "SH085"
      ],
      "sourceScenes": [
        "S11"
      ],
      "start": 231.6,
      "end": 239.5,
      "quote": "And what if it doesn't work? / Then it doesn't work.",
      "observation": "Капсули в долоні, питання матері, відповідь батька і план матері-слухачки. В її кадрі руки зустрічаються перед тілом.",
      "mechanism": "Згода не стирає невизначеність. Предмет і слухач несуть розмову без нового синхронного рота на кожній фразі.",
      "implementation": [
        "NL022",
        "NL023",
        "NL024",
        "NS05"
      ],
      "reason": "Олена купує з невизначеністю результату, а зйомку зберігає незалежно від нього.",
      "limits": "Не копіюємо тезу оригіналу про медицину, що «ховає число»; не оголошуємо догляд необхідним лікуванням.",
      "packets": [
        {
          "id": "SH082",
          "video": {
            "path": "analysis/resilia-dna/packets/SH082/video.mp4",
            "sha256": "e7e22206f1ba911d3f823680cb3194bbeecabdbeb4bd8429b1abde2d90019b5b",
            "bytes": 91032,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "231.600000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.833333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH082/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH082/audio.mp3",
            "sha256": "a61c73c063c33c81d6572de6bdac091387686954a5dd23fbab1a271f04860f82",
            "bytes": 23031
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH082/sheet.jpg",
            "sha256": "4fbd86170cf63ea630a2836df352ccf36fbec1ad9eb46a537440934b917b45b5",
            "bytes": 124918,
            "nativeFrameIndices": [
              6948,
              6954,
              6960,
              6966,
              6972,
              6975,
              6978,
              6984,
              6990,
              6996,
              7002
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH083",
          "video": {
            "path": "analysis/resilia-dna/packets/SH083/video.mp4",
            "sha256": "94affdbd0cc805c2398526dbbc015ae681ff09e3e5b7c0df97f98521b8a04ab3",
            "bytes": 103839,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "233.433333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.700000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH083/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH083/audio.mp3",
            "sha256": "8f8a4a401c6ca21afa24a4db20962085ff906bbbce9fc700f70a437f6fbd8b7d",
            "bytes": 21463
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH083/sheet.jpg",
            "sha256": "8c56952bfa4ebd182329472587ad8dc8ea74db71f66a46ef69ba8e813b8296c5",
            "bytes": 170957,
            "nativeFrameIndices": [
              7003,
              7009,
              7015,
              7021,
              7027,
              7028,
              7033,
              7039,
              7045,
              7051,
              7053
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH084",
          "video": {
            "path": "analysis/resilia-dna/packets/SH084/video.mp4",
            "sha256": "5dd5c357c58600b08eb9c16be1c4cf6dc7b0d784569ae191c8b7d61f3eb1eb85",
            "bytes": 130004,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "235.133333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "3.033334",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH084/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH084/audio.mp3",
            "sha256": "b13e648e606df4ed5c7cce3aa160a04e6bfd2b1c3baa85202eccdd423a127255",
            "bytes": 37450
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH084/sheet.jpg",
            "sha256": "5a3966c13e113573a21bc1d66cae79466efc945844c445e6b3456a37a88b854d",
            "bytes": 209089,
            "nativeFrameIndices": [
              7054,
              7060,
              7066,
              7072,
              7078,
              7084,
              7090,
              7096,
              7099,
              7102,
              7108,
              7114,
              7120,
              7126,
              7132,
              7138,
              7144
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH085",
          "video": {
            "path": "analysis/resilia-dna/packets/SH085/video.mp4",
            "sha256": "c42deca177f3b4d827028af865d3631c85f549b89a1036b1c3cb0007f994e611",
            "bytes": 75802,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "238.166667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.333333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH085/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH085/audio.mp3",
            "sha256": "725a8ac5210befeabf2883e4f93399fed6b2f599e3d2c408f4b8ebf3fefeb9ca",
            "bytes": 17075
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH085/sheet.jpg",
            "sha256": "29be60ed3200f8f26790c8792ea356c9bed7229a58d1b2151fddd00e74db4b99",
            "bytes": 126394,
            "nativeFrameIndices": [
              7145,
              7151,
              7157,
              7163,
              7164,
              7169,
              7175,
              7181,
              7184
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        }
      ]
    },
    {
      "id": "MAP06",
      "sourceEventIds": [
        "E0366",
        "E0367",
        "E0368",
        "E0369",
        "E0370",
        "E0371",
        "E0372",
        "E0373",
        "E0374",
        "E0375",
        "E0376",
        "E0377",
        "E0378",
        "E0379",
        "E0380",
        "E0381",
        "E0382",
        "E0383",
        "E0384"
      ],
      "passportIds": {
        "characters": [
          "OL",
          "IR"
        ],
        "locations": [
          "LOC-ATELIER"
        ],
        "problem": [
          "PROBLEM-OL-NECK"
        ],
        "props": [
          "PROP-STITCH",
          "PROP-TOOLS"
        ],
        "voices": [
          "VOICE-OL",
          "VOICE-IR"
        ]
      },
      "implementationArtifact": "analysis/gopure-free-narrative/proposal.json",
      "result": "Авторський задум; реального нового AV немає. Свіжий AV-перегляд джерела очікує відновлення доступу провайдера.",
      "sourceShots": [
        "SH104"
      ],
      "sourceScenes": [
        "S14"
      ],
      "start": 285.9,
      "end": 294.87,
      "quote": "Thank your daughter. / She's the one who came knocking.",
      "observation": "Батько говорить телефоном на ґанку, відповідь старшого чоловіка за кадром перенаправляє подяку до доньки; стабільний кадр, наприкінці телефон опускається.",
      "mechanism": "Пізні слова повертають значення до раніше побаченої дії; реакції дають час зв’язати дві частини.",
      "implementation": [
        "NL038",
        "NL039",
        "NL040",
        "NL041",
        "NL043",
        "NL045"
      ],
      "reason": "У новій історії віддаємо емоцію самій майстрині: донька хоче її знання, а мати його передає. Це новий payoff, не копія подяки рятівнику.",
      "limits": "Камера не оголошується такою, що від’їжджає: це не встановлено frozen evidence.",
      "packets": [
        {
          "id": "SH104",
          "video": {
            "path": "analysis/resilia-dna/packets/SH104/video.mp4",
            "sha256": "9450aec9266dc845272c2c30288080d9eae5da4f03e7c32bf9816927528d181c",
            "bytes": 565918,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "285.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "8.966667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH104/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH104/audio.mp3",
            "sha256": "fb78a920b2f42437bfdee617af7ef3bd008ddf80e6069b525c94af97a4e8e250",
            "bytes": 108608
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH104/sheet.jpg",
            "sha256": "1f321efcb8549b4ea67289f67eb783892af2122a57de67644fe1128eac022104",
            "bytes": 716849,
            "nativeFrameIndices": [
              8577,
              8583,
              8589,
              8595,
              8601,
              8607,
              8613,
              8619,
              8625,
              8631,
              8637,
              8643,
              8649,
              8655,
              8661,
              8667,
              8673,
              8679,
              8685,
              8691,
              8697,
              8703,
              8709,
              8711,
              8715,
              8721,
              8727,
              8733,
              8739,
              8745,
              8751,
              8757,
              8763,
              8769,
              8775,
              8781,
              8787,
              8793,
              8799,
              8805,
              8811,
              8817,
              8823,
              8829,
              8835,
              8841,
              8845
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        }
      ]
    },
    {
      "id": "MAP07",
      "sourceEventIds": [
        "E0326",
        "E0327",
        "E0328",
        "E0329",
        "E0330",
        "E0331",
        "E0332",
        "E0333",
        "E0334",
        "E0335",
        "E0336",
        "E0337",
        "E0338",
        "E0339",
        "E0340",
        "E0341",
        "E0342",
        "E0407",
        "E0408",
        "E0409",
        "E0410",
        "E0411",
        "E0412",
        "E0413",
        "E0414",
        "E0415",
        "E0416",
        "E0417",
        "E0418",
        "E0419",
        "E0420",
        "E0421",
        "E0422",
        "E0423",
        "E0424",
        "E0425",
        "E0426",
        "E0428",
        "E0429",
        "E0430"
      ],
      "passportIds": {
        "characters": [
          "OL",
          "IR"
        ],
        "locations": [
          "LOC-ATELIER",
          "LOC-HOME"
        ],
        "problem": [
          "PROBLEM-OL-NECK"
        ],
        "props": [
          "PROP-STITCH",
          "PROP-JAR-OL"
        ],
        "voices": [
          "VOICE-OL",
          "VOICE-IR"
        ]
      },
      "implementationArtifact": "analysis/gopure-free-narrative/proposal.json",
      "result": "Авторський задум; реального нового AV немає. Свіжий AV-перегляд джерела очікує відновлення доступу провайдера.",
      "sourceShots": [
        "SH092",
        "SH093",
        "SH094",
        "SH095",
        "SH109",
        "SH110"
      ],
      "sourceScenes": [
        "S12",
        "S15",
        "S16"
      ],
      "start": 255.63,
      "end": 325.57,
      "quote": "You are a helpful little chef. / Not just for you. / For the little ones who’d do anything to keep you here.",
      "observation": "Побутові сцени батька й дитини, кухня, наприкінці сімейний стіл під VO батька; фінальна картка після завершення голосу. Рух рота дитини під VO не встановлює окрему чутну фразу.",
      "mechanism": "Звичайна спільна дія — винагорода за драму. VO має власника, зображення продовжує життя; картка дає час після голосу.",
      "implementation": [
        "NL042",
        "NL043",
        "NL044",
        "NL045",
        "ED043",
        "NS07"
      ],
      "reason": "Один самостійно зроблений стібок замінює сімейний обід. Комерційний VO починається після реакції, а не забирає її.",
      "limits": "Не називаємо весь діапазон одним суцільним епізодом: це вибрані рознесені приклади. Кухонний J-cut не доводимо raw ASR; нові J/L cuts — режисерський задум.",
      "packets": [
        {
          "id": "SH092",
          "video": {
            "path": "analysis/resilia-dna/packets/SH092/video.mp4",
            "sha256": "da886b78018f2862c723095af22f48a2a25817a3c68710aa7439ecbfd2aede79",
            "bytes": 293907,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "255.633333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.966667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH092/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH092/audio.mp3",
            "sha256": "96cf3c2e2469d01d17b52ac8636c255f8c6ddea0f2c3060b131658c0de660c5b",
            "bytes": 24598
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH092/sheet.jpg",
            "sha256": "fab5567883f62528f1223fb67bab2855d2e046cf313eb11bf573edc6ce203b53",
            "bytes": 268368,
            "nativeFrameIndices": [
              7669,
              7675,
              7681,
              7687,
              7693,
              7698,
              7699,
              7705,
              7711,
              7717,
              7723,
              7727
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH093",
          "video": {
            "path": "analysis/resilia-dna/packets/SH093/video.mp4",
            "sha256": "05f225c2e109f5780b62453d2e37822f48c1641ac3576879defe79798d7d3b35",
            "bytes": 226420,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "257.600000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.500000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH093/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH093/audio.mp3",
            "sha256": "fab9d6c9d412dc7ac6eb0a9c05366e2e6900fd783fa1f1d9b485f42ac22f9e32",
            "bytes": 30868
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH093/sheet.jpg",
            "sha256": "57d0fc420ac36b145436f868a976d5a717c8607683fc6005484d8472e0f2b882",
            "bytes": 231810,
            "nativeFrameIndices": [
              7728,
              7734,
              7740,
              7746,
              7752,
              7758,
              7764,
              7765,
              7770,
              7776,
              7782,
              7788,
              7794,
              7800,
              7802
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH094",
          "video": {
            "path": "analysis/resilia-dna/packets/SH094/video.mp4",
            "sha256": "182cfb4c5dfc2b5356d64e98ccf05252fe6000c11cd5a502e88ffa400ba8a87c",
            "bytes": 213806,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "260.100000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.900000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH094/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH094/audio.mp3",
            "sha256": "d28920cca9901272ec2df45c8bcc9abb136a93e8d7fab66e68b79a065e37bac3",
            "bytes": 35883
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH094/sheet.jpg",
            "sha256": "606449c27fd76d4dc93edd62a8e9ef2ebb7e93a8e575c3f7a04ccdcfb7f0aacc",
            "bytes": 251321,
            "nativeFrameIndices": [
              7803,
              7809,
              7815,
              7821,
              7827,
              7833,
              7839,
              7845,
              7846,
              7851,
              7857,
              7863,
              7869,
              7875,
              7881,
              7887,
              7889
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH095",
          "video": {
            "path": "analysis/resilia-dna/packets/SH095/video.mp4",
            "sha256": "cc743ef6d445a4032cb560ace8e8534caa2f2352d8993623599e87cf8d606de7",
            "bytes": 218468,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "263.000000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "3.100000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH095/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH095/audio.mp3",
            "sha256": "e2408e59c3905d83c96f1ddb4452ac4e7b85b29356ce79e8c992d3a6226d5beb",
            "bytes": 38077
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH095/sheet.jpg",
            "sha256": "08b89a44224f53297aa378272f661172456ba5b9ec78ad5d907029cc82ab8986",
            "bytes": 303515,
            "nativeFrameIndices": [
              7890,
              7896,
              7902,
              7908,
              7914,
              7920,
              7926,
              7932,
              7936,
              7938,
              7944,
              7950,
              7956,
              7962,
              7968,
              7974,
              7980,
              7982
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH109",
          "video": {
            "path": "analysis/resilia-dna/packets/SH109/video.mp4",
            "sha256": "cb3a48d17917296e3b70977548133a35836a9f82f1bf14baeff60e6e049fc490",
            "bytes": 605334,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "315.933333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "6.100000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH109/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH109/audio.mp3",
            "sha256": "11e0be064ec8796de07d54dab2170e8aadfbd6f983d7be7a30e03add86f86f4f",
            "bytes": 74126
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH109/sheet.jpg",
            "sha256": "e343bff1d61b4d24228a39262cb50ac5871eb6323740d70a775de0b4da46e8b5",
            "bytes": 531832,
            "nativeFrameIndices": [
              9478,
              9484,
              9490,
              9496,
              9502,
              9508,
              9514,
              9520,
              9526,
              9532,
              9538,
              9544,
              9550,
              9556,
              9562,
              9568,
              9569,
              9574,
              9580,
              9586,
              9592,
              9598,
              9604,
              9610,
              9616,
              9622,
              9628,
              9634,
              9640,
              9646,
              9652,
              9658,
              9660
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        },
        {
          "id": "SH110",
          "video": {
            "path": "analysis/resilia-dna/packets/SH110/video.mp4",
            "sha256": "80a83e45538620f121100af8872bca42d71dbb4c1192072635428d3c2debf078",
            "bytes": 288432,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "322.033333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "3.533333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH110/video.mp4"
            ]
          },
          "audio": {
            "path": "analysis/resilia-dna/packets/SH110/audio.mp3",
            "sha256": "164c2dbca820c61369b08c6c53feafc2c08497d1e252ccf24b3e67dfd2a95dce",
            "bytes": 43406
          },
          "sheet": {
            "path": "analysis/resilia-dna/packets/SH110/sheet.jpg",
            "sha256": "c0dbce39d92e77e4b1cd58277fdd8db4c9bf46af4f0e88556144ed14933615d7",
            "bytes": 416391,
            "nativeFrameIndices": [
              9661,
              9667,
              9673,
              9679,
              9685,
              9691,
              9697,
              9703,
              9709,
              9713,
              9715,
              9721,
              9727,
              9733,
              9739,
              9745,
              9751,
              9757,
              9763,
              9766
            ],
            "sampling": "native frames at ≤0.2s gaps, plus entry/middle/exit; labels are source PTS"
          }
        }
      ]
    }
  ],
  "passports": {
    "characters": [
      {
        "id": "OL",
        "name": "Олена Коваль",
        "age": 54,
        "role": "Мати дорослої Ірини; майстриня та авторка власного курсу, покупчиня.",
        "identity": "Темно-каштанове каре до щелепи з помітною сивиною біля скронь; карі очі, овальне обличчя, звичайна статура. Без омолодження обличчя, ваги, рук чи волосся між сценами.",
        "voice": "VOICE-OL: природний український жіночий середньо-низький регістр; стримана, не хрипка штучно. Питання короткі; пояснення вчительки повільніше, CTA рівний. Телефон і VO — та сама людина, акустика може змінитися.",
        "agency": "Сама просить правку, визнає її наслідок, оплачує повтор, перевіряє крем, замовляє й доглядає; наприкінці вирішує кадр і починає урок.",
        "arc": "Приховуюся → називаю свою потребу → беру ціну → доглядаю та працюю → бачу недосконалість → навчаю."
      },
      {
        "id": "IR",
        "name": "Ірина Коваль",
        "age": 29,
        "role": "Доросла донька; займається відеомонтажем, допомагає мамі з курсом.",
        "identity": "Світло-каштанове волосся зібране низько, світла шкіра, тонкі брови. Синій светр у двох знімальних днях; на телефоні не показана.",
        "voice": "VOICE-IR: трохи вищий, виразний молодий голос; перші репліки робочі, наприкінці допитлива учениця. Телефон NL025 має легку смугу зв’язку, без зміни тембру/акценту.",
        "agency": "Виконує правку, приймає мамине заперечення, бронює, пропонує кадр без нав’язування, сама просить навчити.",
        "arc": "Технічно виправляю → справді слухаю → питаю як учениця. Не beauty-експертка й не суддя маминого віку."
      },
      {
        "id": "LA",
        "name": "Лариса",
        "age": 55,
        "role": "Колега Олени, орендує сусіднє місце; давня знайома.",
        "identity": "Коротке русяве волосся з сивиною, кругліше обличчя; сіра футболка, зелений кардиган. Інша людина, не старша версія Олени.",
        "voice": "VOICE-LA: нижчий, трохи зернистий, неквапливий; говорить як рівна подруга. Жодної дикторської «наукової» постановки.",
        "agency": "Питає про переробку; розповідає про власний догляд; чесно не гарантує зникнення складок або строк.",
        "arc": "Помітила роботу → вислухала → показала конкретний засіб → повернула вибір Олені."
      }
    ],
    "problem": {
      "id": "PROBLEM-OL-NECK",
      "owner": "OL",
      "region": "Передня та передньобічна поверхня шиї Олени; не обличчя, не руки, не шия доньки.",
      "markers": [
        "Видима сухіша нерівна фактура при нейтральному світлі.",
        "Природні горизонтальні складки, особливо при нахилі; залишаються у фіналі.",
        "Відчуття стягування — тільки заявлений досвід героїні, не візуально вимірюваний маркер."
      ],
      "baseline": "NS01–NS03 і перше нанесення NS04: однакова фактура, природні складки; ніякого подразнення або хвороби.",
      "practical": "Перевіряє на екрані шию замість змісту власного уроку; шарф не дає їй бажаного комфорту.",
      "emotional": "Боïться бути видимою, сама просить прибрати обличчя; хоче бути авторкою, не дочекатися чужого дозволу.",
      "productUse": "Власна банка після окремої заявки й отримання; мала кількість на чисту шию/декольте вранці й увечері; вранці окремий SPF. Контакт пальців показаний.",
      "progression": [
        {
          "state": "BASE",
          "scenes": [
            "NS01",
            "NS02",
            "NS03"
          ],
          "result": "Базова сухість; хвилювання."
        },
        {
          "state": "FIRST",
          "scenes": [
            "NS04"
          ],
          "result": "Перший вечір без миттєвої зміни."
        },
        {
          "state": "ROUTINE",
          "scenes": [
            "NS04"
          ],
          "result": "Другий/четвертий тижні: догляд і праця; не заявляємо виміряної кривої ефекту."
        },
        {
          "state": "LATER",
          "scenes": [
            "NS05",
            "NS06"
          ],
          "result": "Через шість тижнів можливий скромно гладкіший вигляд сухої фактури; складки/вік залишаються. Вона каже про кращий комфорт."
        }
      ],
      "matchedComparison": "Для майбутньої оцінки BASE/LATER окремо зняти ту саму 50 мм оптику, дистанцію, експозицію, баланс білого, позу, напрям світла й нейтральний вираз. Не використовувати ранкове/вечірнє relight як доказ. Ці matching frames ще не створені. В рекламі не ставити їх як клінічний before/after.",
      "final": "Повторний кадр NS05 показує збережені складки; фінальна зігнута шия у NS06 не ретушується.",
      "excluded": [
        "IR",
        "LA"
      ],
      "evidence": "CLAIM-01/02/03; офіційний опис бренду, локальний snapshot, AAD для меж класу. Це вигадана драматизація, не незалежна ефективність або справжній відгук.",
      "prohibited": "Нульове стирання віку; не доводити результат знятим шарфом/усмішкою; не переносити медичний ризик джерела; не робити догляд умовою авторства."
    },
    "locations": [
      {
        "id": "LOC-ATELIER",
        "layout": "Вікно ліворуч, машинка лівий край столу, Олена ближче ліворуч, Ірина/Лариса навпроти праворуч; шафки позаду праворуч. Порожній стілець для Ірини є з початку.",
        "light": "М’яке вікно + тепла практична лампа. Перед повтором зафіксувати позиції й matching exposure.",
        "sound": "Невелика кімната з текстилем, сухий голос, тихе міське тло; машинка не працює під репліками.",
        "continuity": "Не перестрибувати через вісь. У NS06 перехід у фронтальну камеру мотивований записом уроку."
      },
      {
        "id": "LOC-HOME",
        "layout": "Кухонний стіл біля темного вікна; програма зліва, телефон справа. Домашній простір без ознак медичного кабінету.",
        "light": "Вечірня тепла лампа; ранкова підготовка має явний часовий титр.",
        "sound": "Тиха квартира, холодильник далеко; телефон відрізняється від room voice."
      },
      {
        "id": "LOC-BATH",
        "layout": "Дзеркало позаду/ліворуч, поличка праворуч, goPure праворуч, кришка поруч; SPF окремо ліворуч.",
        "light": "Чисте нейтральне світло для шкіри. Ранкова зміна світла позначає час, не результат.",
        "sound": "Трохи живіша кімната; VO сухий і окремий, вода не перекриває слова."
      }
    ],
    "wardrobeProps": [
      {
        "id": "WARD-OL-WORK",
        "owner": "OL",
        "description": "Глиняна блуза, відкритий верхній ґудзик, темно-синій фартух. Ті самі в NS01/02/05/06; нейтральна робоча блуза для тижневих вставок явно інший день.",
        "continuity": "Шарф окремий предмет, не зміна вирізу. Обидва рукави глиняні в крупних рук Олени."
      },
      {
        "id": "PROP-SCARF",
        "owner": "OL",
        "description": "Тонкий бежевий шарф: на шиї NS01, послаблений/на руці й на стільці NS02, удома на гачку NS04, відсутній NS05/06.",
        "continuity": "Не передається доньці; знятий шарф не косметичний доказ."
      },
      {
        "id": "PROP-STITCH",
        "owner": "OL",
        "description": "Зелений лляний зразок A завершений на початку; у NL012 один стібок розпорюється. Новий зразок B для повтору в NS04/05/06.",
        "continuity": "A лежить удома NS03; B виникає в тижневій вставці. Не перетворювати розпоротий шов на готовий без часу."
      },
      {
        "id": "PROP-TOOLS",
        "owner": "OL",
        "description": "Сталеві ножиці, розпорювач з темною ручкою, голка/світла нитка; наприкінці голка передається Ірині.",
        "continuity": "ED042: глиняні рукави зліва, сині справа; голка весь час у тканині/над нею, не крізь пальці."
      },
      {
        "id": "PROP-LAPTOP",
        "owner": "IR",
        "description": "Темний ноутбук із вихідним і кадрованим дублями; запис під час обговорення німий.",
        "continuity": "Без зміни обличчя у playback. UI і паперові слова композитяться після generation."
      },
      {
        "id": "PROP-JAR-LA",
        "owner": "LA",
        "description": "Власна банка Лариси з її сумки; залишається закритою, повертається в сумку NS02.",
        "continuity": "Олена не забирає її і не наносить чужий продукт."
      },
      {
        "id": "PROP-JAR-OL",
        "owner": "OL",
        "description": "Окрема банка після заявки/отримання. Локальний фіолетовий циліндр, срібляста кришка, біла етикетка Tighten & Lift Neck Cream, 50 ml; геометрію уточнити за фізичним SKU.",
        "continuity": "Не використовувати випадкову сучасну US-упаковку замість local snapshot. Кришка праворуч у ванній. Етикетка тільки за перевіреним пакшотом."
      },
      {
        "id": "PROP-SPF",
        "owner": "OL",
        "description": "Окремий нейтральний SPF із читабельною категорією, без схожості з goPure.",
        "continuity": "Не приписувати SPF крему goPure; тільки ранковий кадр."
      },
      {
        "id": "PROP-PROGRAM",
        "owner": "OL",
        "description": "Паперова програма «Олена Коваль. Перший урок»; примітка «показати повільніше» з’являється NS04.",
        "continuity": "Робота над поясненням виправдовує фінальну відповідь учениці; не новий предмет у фіналі."
      }
    ]
  },
  "claims": [
    {
      "id": "CLAIM-01",
      "claim": "goPure призначений для шиї/декольте; бренд описує зволоження й гладкіший вигляд фактури.",
      "source": "https://gopure.com/products/gp-tighten-lift-neck-cream",
      "status": "Поточне твердження виробника, перевірено 2026-09-17; незалежний trial report не оцінювався.",
      "use": [
        "NL018",
        "NL021",
        "NL046"
      ],
      "limits": "Не запозичуємо відсотки, 4–8-тижневу гарантію, медичний ліфтинг або біологічне омолодження."
    },
    {
      "id": "CLAIM-02",
      "claim": "Офіційна інструкція: мала кількість на шию/декольте двічі на день; потім SPF. FAQ описує рухи вгору.",
      "source": "https://gopure.com/products/gp-tighten-lift-neck-cream",
      "status": "Інструкція бренду; для конкретної локальної банки перед виробництвом звірити маркування.",
      "use": [
        "NL023",
        "NL027",
        "NL028",
        "ED023"
      ],
      "limits": "Не робимо SPF властивістю goPure; не стверджуємо глибину проникнення чи «60 разів більше»."
    },
    {
      "id": "CLAIM-03",
      "claim": "Зволожувач може зробити дрібні лінії менш помітними; крем не відтворює результат хірургічної підтяжки.",
      "source": "https://www.aad.org/public/cosmetic/younger-looking/firm-sagging-skin",
      "status": "Фахове пояснення про клас продуктів, не незалежний тест goPure.",
      "use": [
        "NL020",
        "NL031",
        "PROBLEM-OL-NECK"
      ],
      "limits": "Не доводить перевагу goPure над іншим відповідним зволожувачем. Не заявляємо, що крем для обличчя небезпечний для шиї."
    },
    {
      "id": "CLAIM-04",
      "claim": "Локальний сайт: заявка з ім’ям/номером; оператор підтверджує; Нова пошта; оплата після огляду при отриманні.",
      "source": "https://gopure.space/lp/",
      "status": "Прямий HTTPS GET 200, 2026-09-17; збережені HTML, текст і SHA-256. Веб-браузер пошукового інструмента не відкрив URL; прямий серверний запит відкрив. Замовлення й виконання не тестувалися.",
      "use": [
        "ED019",
        "NL047",
        "NL048"
      ],
      "limits": "Використано тільки форму заявки та атрибутовану оплату. 895 грн, −50%, 1–3 дні, 10 хв, 60 днів, reviews і countdown є на сторінці, але не включені в обіцянки сценарію. Перед release переперевірити."
    },
    {
      "id": "CLAIM-05",
      "claim": "Олена каже, що стало комфортніше; можлива скромна зміна видимої сухої фактури через сюжетні шість тижнів.",
      "source": "Сценарний задум, не зовнішнє свідчення.",
      "status": "Вигадана драматизація; ні аудіо, ні результат, ні тест продукту не створені.",
      "use": [
        "NL032",
        "NS05"
      ],
      "limits": "Явна позначка драматизації. Не відгук реальної покупчині; не доказ причинності. Складки залишаються, рішення зніматися прийняте до купівлі."
    }
  ],
  "earlyAttention": [
    {
      "second": 1,
      "eventId": "EV001",
      "knows": "Її обличчя прибране з уроку.",
      "invitedFeeling": "Настороженість.",
      "wants": "Чому її прибрали?",
      "gets": "Конкретний результат монтажу.",
      "expects": "Реакція власниці.",
      "status": "Редакторська гіпотеза; не виміряне утримання."
    },
    {
      "second": 3,
      "eventId": "EV002",
      "knows": "Вона сама здивована повнотою вилучення.",
      "invitedFeeling": "Незручність разом із нею.",
      "wants": "Хто ухвалив рішення?",
      "gets": "Однослівна жива відповідь.",
      "expects": "Пояснення доньки.",
      "status": "Редакторська гіпотеза; не виміряне утримання."
    },
    {
      "second": 5,
      "eventId": "EV003",
      "knows": "Голос і руки залишені.",
      "invitedFeeling": "Втрата людини за корисною роботою.",
      "wants": "Чи це образа?",
      "gets": "Практичне пояснення, ще не причина.",
      "expects": "Хто просив.",
      "status": "Редакторська гіпотеза; не виміряне утримання."
    },
    {
      "second": 10,
      "eventId": "EV006",
      "knows": "Вона просила менший крупний план.",
      "invitedFeeling": "Впізнавання невдалої самозахисної правки.",
      "wants": "Що болить у цьому зображенні?",
      "gets": "Вихідний дубль повертається на екран.",
      "expects": "Власне пояснення матері.",
      "status": "Редакторська гіпотеза; не виміряне утримання."
    },
    {
      "second": 15,
      "eventId": "EV009",
      "knows": "Мати весь час дивиться на шию; донька заспокоює.",
      "invitedFeeling": "Напруження між добрим наміром і потребою.",
      "wants": "Чи заспокоєння спрацює?",
      "gets": "Тримаємо слухачку під голосом доньки.",
      "expects": "Коротке «Я буду».",
      "status": "Редакторська гіпотеза; не виміряне утримання."
    },
    {
      "second": 20,
      "eventId": "EV012",
      "knows": "Її погляд має значення; це її перший власний курс.",
      "invitedFeeling": "Повага до досвіду й бажання власної справи.",
      "wants": "Вона погодиться зникнути?",
      "gets": "Чуємо професійний факт, бачимо її матеріал.",
      "expects": "Її рішення про повтор.",
      "status": "Редакторська гіпотеза; не виміряне утримання."
    }
  ],
  "loops": [
    {
      "id": "Q1",
      "question": "Хто прибрав жінку з її уроку?",
      "opened": "EV001",
      "escalated": [
        "NL002",
        "NL003"
      ],
      "answered": [
        "NL004"
      ],
      "meaning": "Від зовнішнього кривдника до її власного захисного рішення."
    },
    {
      "id": "Q2",
      "question": "Чого вона насправді хотіла?",
      "opened": "NL005",
      "escalated": [
        "NL006",
        "NL007"
      ],
      "answered": [
        "NL008",
        "NL009"
      ],
      "meaning": "Її власний погляд і авторство, не чужа оцінка віку."
    },
    {
      "id": "Q3",
      "question": "Чи заплатить за повернення в кадр?",
      "opened": "NL010",
      "escalated": [
        "NL011"
      ],
      "answered": [
        "NL012",
        "NL025"
      ],
      "meaning": "Обіцяна дія стає роботою та підтвердженою бронню."
    },
    {
      "id": "Q4",
      "question": "Яку реальну косметичну задачу вирішувати?",
      "opened": "NL015",
      "escalated": [
        "NL017",
        "NL019"
      ],
      "answered": [
        "NL020",
        "NL021"
      ],
      "meaning": "Сухість/комфорт та вигляд текстури замість стирання віку."
    },
    {
      "id": "Q5",
      "question": "Чи гарантований результат до зйомки?",
      "opened": "NL022",
      "escalated": [
        "NL023"
      ],
      "answered": [
        "NL024",
        "NL031",
        "NL032"
      ],
      "meaning": "Гарантії немає; героїня доглядає і працює з невизначеністю."
    },
    {
      "id": "Q6",
      "question": "Чи повернеться до старого приховування?",
      "opened": "NL030",
      "escalated": [
        "NL031",
        "NL033",
        "NL035"
      ],
      "answered": [
        "NL034",
        "NL036",
        "NL037"
      ],
      "meaning": "Тепер оцінює кадр як викладачка, а не тільки об’єкт зйомки."
    },
    {
      "id": "Q7",
      "question": "Чому донька зупинила запис?",
      "opened": "NL038",
      "escalated": [
        "NL039"
      ],
      "answered": [
        "NL040"
      ],
      "meaning": "Мікротривога перетворюється на запит знання; не довгий штучний twist."
    },
    {
      "id": "Q8",
      "question": "Чи вийде передати вміння?",
      "opened": "NL040",
      "escalated": [
        "NL042",
        "NL043",
        "NL044"
      ],
      "answered": [
        "NL045",
        "ED043"
      ],
      "meaning": "Завершений стібок й автономія учениці — тихий payoff."
    },
    {
      "id": "Q9",
      "question": "Де перевірити продукт і як замовити?",
      "opened": "NL046",
      "escalated": [],
      "answered": [
        "NL047",
        "NL048",
        "FINAL"
      ],
      "meaning": "Інформація, форма з номером і атрибутована оплата; без вигаданої терміновості."
    }
  ],
  "selfReview": [
    {
      "id": "REV01",
      "fault": "Ранній задум: крем → впевненість → рішення повернутися в кадр. Це робило косметику дозволом на власну справу.",
      "rewrite": "NL010/12 і підтвердження NL025 розташовані до будь-якого результату; NL024 прямо зберігає зйомку незалежно від крему.",
      "evidence": [
        "NL010",
        "NL012",
        "NL024",
        "NL025"
      ],
      "result": "Причинність змінено; емоційну дію виконує жінка."
    },
    {
      "id": "REV02",
      "fault": "Курс без обличчя легко виглядав як вікова дискримінація доньки.",
      "rewrite": "NL004 встановлює, що прохання матері було виконане. Донька не краде авторство й не оцінює шию.",
      "evidence": [
        "NL004",
        "NL007",
        "NL033"
      ],
      "result": "Конфлікт між двома потребами матері, без штучної лиходійки."
    },
    {
      "id": "REV03",
      "fault": "Шість тижнів могли прочитатися як гарантований строк goPure.",
      "rewrite": "Вільна дата NS01 раніше за продукт; NL023 «Не знаю», NL031 «Складки лишилися»; візуально жодного повного стирання.",
      "evidence": [
        "NL011",
        "NL023",
        "NL031"
      ],
      "result": "Строк належить студії; косметичний результат індивідуальний."
    },
    {
      "id": "REV04",
      "fault": "Подруга могла говорити як рекламний лікар: перелік активів і механізмів не відповідав живій сцені.",
      "rewrite": "Прибрані ingredient lecture, «підтягує контур» і біологічні пояснення; залишені питання «зникнуть?» / «встигну?» та обмежені відповіді.",
      "evidence": [
        "NL019",
        "NL020",
        "NL021",
        "NL022",
        "NL023"
      ],
      "result": "Пояснення зайняте конкретними запереченнями, не доповіддю."
    },
    {
      "id": "REV05",
      "fault": "Без видимої доставки банка Лариси могла перетворитися на мамину; виникав спільний finger-dip.",
      "rewrite": "Лариса прибирає свою банку; Олена окремо подає заявку; коробка через кілька днів, своя банка в першому догляді.",
      "evidence": [
        "ED015",
        "ED019",
        "ED021",
        "ED023"
      ],
      "result": "Походження двох однакових предметів розділене."
    },
    {
      "id": "REV06",
      "fault": "«Монтаж догляду шість тижнів» ховав середину й працю героїні.",
      "rewrite": "Окремі дії: отримання, відкручування, контакт/закінчений мазок, SPF, переписаний урок, повтор шва, закрита банка, вихід на зйомку.",
      "evidence": [
        "NS04"
      ],
      "result": "Кожен проміжок має дію/час/voice owner; немає недеталізованого монтажного блоку."
    },
    {
      "id": "REV07",
      "fault": "Фінальний комплімент «ти чудово виглядаєш» зробив би зовнішність єдиною винагородою.",
      "rewrite": "Донька просить повільніше показати шов; мати не вимикає камеру й передає один завершений рух.",
      "evidence": [
        "NL040",
        "NL041",
        "NL043",
        "NL045"
      ],
      "result": "Payoff — корисність і близькість, зароблені підготовкою."
    },
    {
      "id": "REV08",
      "fault": "Ризик надмірної довжини й одноманітних двох голів у середині.",
      "rewrite": "Репліки йдуть над шарфом, банкою, власними руками та слухачкою. Короткі «Не знаю» і «Я буду» контрастують із довшими відповідями; не кожен event є cut.",
      "evidence": [
        "NS01",
        "NS02",
        "NS04",
        "NS06"
      ],
      "result": "Ритм спроєктований; реальну вимовність і паузи ще треба перевірити після native AV."
    },
    {
      "id": "REV09",
      "fault": "Публікація могла успадкувати фіксовані 122 фрази/16 сцен і старі approved flags.",
      "rewrite": "Власні NS/NL/ED/EV ID; вибіркові MAP посилання на незмінні source SH/S. Новий статус proposal, жодного перенесеного схвалення.",
      "evidence": [
        "MAP01",
        "MAP07"
      ],
      "result": "Перевіряється цілісність цього сценарію; історичний ordered gate не застосовується."
    }
  ],
  "shareVsWatchVsBuy": {
    "keepWatching": "Чи жінка повернеться у власний кадр; чи нова зупинка доньки знову про її зовнішність. Питання мають конкретні відповіді.",
    "share": "Можливий приватний мотив надіслати мамі/подрузі: «я хочу навчитися саме в тебе». Це редакторська гіпотеза впізнавання, не прогноз віральності.",
    "buy": "Окрема практична потреба догляду за сухою шкірою шиї, зрозуміла рутина, можливість перевірити склад і локальні умови. Емоційна історія не доводить переваги бренду."
  },
  "frozenInputs": [
    {
      "path": "analysis/resilia-dna/dna.json",
      "sha256": "0993b62d3c841ce87ed6c9954a1a1330ff1ebabeb1824aae3707ed7970a55df5"
    },
    {
      "path": "analysis/resilia-dna/packets/index.json",
      "sha256": "55b100e134706b4102dde5d6739f83e5e76ac6cfa08862c7643cd2bf2c88b657"
    },
    {
      "path": "analysis/resilia-dna/media/original-review.mp4",
      "sha256": "114974b130c965eba18e735da155cbe7a3e237a647f8e2aeb39b6bf55881497d"
    },
    {
      "path": "analysis/emotion-language-audit/source-phrase-study.json",
      "sha256": "43bb1ca664f8b7c046ad6dd34a632eb5e091ba6d77d4c7fcdf0f0e36c531df5e"
    },
    {
      "path": "analysis/emotion-language-audit/passport-rebuild/narrative-passport.json",
      "sha256": "2b5888d23087bec4e92070822d0641ac7af307850c89c27e646df65f32b1839a"
    }
  ],
  "generatedFilm": false,
  "approved": false,
  "producedMedia": [],
  "speechIndex": {
    "OL": [
      "NL002",
      "NL005",
      "NL006",
      "NL008",
      "NL009",
      "NL010",
      "NL012",
      "NL014",
      "NL015",
      "NL017",
      "NL019",
      "NL022",
      "NL024",
      "NL026",
      "NL027",
      "NL028",
      "NL029",
      "NL030",
      "NL031",
      "NL032",
      "NL034",
      "NL036",
      "NL037",
      "NL039",
      "NL041",
      "NL043",
      "NL045",
      "NL046",
      "NL047",
      "NL048"
    ],
    "IR": [
      "NL001",
      "NL003",
      "NL004",
      "NL007",
      "NL011",
      "NL025",
      "NL033",
      "NL035",
      "NL038",
      "NL040",
      "NL042",
      "NL044"
    ],
    "LA": [
      "NL013",
      "NL016",
      "NL018",
      "NL020",
      "NL021",
      "NL023"
    ]
  },
  "productionPlan": {
    "status": "Конкретний план майбутнього виробництва; витрати на generation не авторизовані цим завданням. Немає approved boards, stress lock, native takes або accepted soundtrack.",
    "modelPolicy": {
      "baselineModel": "google/gemini-omni-flash-1-1",
      "baselineSource": "harness/omni-model-reference.json",
      "status": "Поточний зафіксований проектний route, НЕ свіжа перевірка доступності. На старті виробництва знов перевірити official Google/provider docs; новіший Flash спершу додати до gate з тестами.",
      "resolution": "native360p",
      "language": "uk — native Ukrainian AV",
      "compiler": "scripts/compile_narrative.py (v2)",
      "outputPolicy": {
        "path": "harness/owner-output-policy.json",
        "sha256": "6d304383c52c3c35e865b4345ca0fa490726f81be0572361ca293e8542cbda98"
      },
      "noFallback": "Без іншого відеобекенда, окремого TTS-master або music stage. Немає твердження про exact voice cloning."
    },
    "numberedStages": [
      {
        "step": 1,
        "action": "Уточнити конкретний локальний SKU/пакшот та поточну пропозицію; перевірити останній Omni Flash і ліміти reference/duration. Зберегти sources/version/date.",
        "exit": "Актуальні receipts; не переатрибутовувати старі відео як нові passing inputs."
      },
      {
        "step": 2,
        "action": "Схвалений новий сценарій → occurrence-level український stress ledger для NL001–NL048. Кожне багатоскладове входження має контекст, джерело наголосу й U+0301. Окремо назва goPure Tighten & Lift; єдина вимова в OL/LA.",
        "exit": "Text preflight, word IDs, exact hashes; це ще не почута правильність."
      },
      {
        "step": 3,
        "action": "За цими письмовими паспортами створити й переглянути реальні OL/IR/LA, wardrobe/location/product/problem BASE/FIRST/LATER references. Схеми цього звіту — лише concept blocking. Кожна генерація має власний релевантний ACTUAL source frame/AV плюс нові паспорти.",
        "exit": "Прийняті видимі вікові/предметні/просторові стани; без підміни фотографій схемами."
      },
      {
        "step": 4,
        "action": "Розв’язати нижче знайдене legacy source_scene == authored scene. Додати окремий function-reference binding, не перейменовуючи S01/NS01. Оновити compiler/tests до першої платної native заявки.",
        "exit": "Positive cross-scene/reorder compile та negative provenance/missing-word/voice tests; історичний профіль без регресій."
      },
      {
        "step": 5,
        "action": "Підготувати actual moving original ranges для GU01–GU20, derivative SHA-256, source timing/shot provenance та upload receipts. Локальні boards/cast/product — додаткові references.",
        "exit": "Кожен request має supported source transport; якщо moving AV не підтримано — зупинити affected unit, не переносити чужий still-exception."
      },
      {
        "step": 6,
        "action": "Спершу native діагностика GU02 (слухачка), GU10 (phone), GU11 (контакт крему), GU18 (руки), потім решта одиниць. Це план черги, не заявки зараз. Кожна одиниця продовжує контекст сцени й голоси.",
        "exit": "Фактичні task IDs, модель/версія, requested/actual timings, failed receipts збережені. Немає автоматичного pass за provider success."
      },
      {
        "step": 7,
        "action": "Після кожної joint AV generation слухати всі слова/наголоси, дивитися губи, руки, identities, garment/prop/problem states та action across cuts. Review target брати з compiled stressed text, не передруковувати.",
        "exit": "Post-generation word/lip/action/stress review до retention; fail/uncertain → versioned repair із matching actual original, invalidation тільки залежних файлів. ASR не сертифікує звук."
      },
      {
        "step": 8,
        "action": "Побудувати edit по accepted native clock, звести безперервні phrase/room-tone bridges і не дублювати слова. Допуск [planned×0.75, planned×1.25] включно для authored unit без пропусків слів/дій/реакцій.",
        "exit": "Actual edit відрізняється від цієї запропонованої шкали чесно; без time-compress лише для потрапляння в план."
      },
      {
        "step": 9,
        "action": "У HyperFrames зібрати clean master, екран ноутбука/сайта, часові титри, графічну фінальну картку. З reviewed native timings додати українські субтитри, stripping тільки U+0301. Omni кадри залишаються caption-free.",
        "exit": "Словопокриття, readable 360p/mobile, без occlusion обличчя/шиї/банки/рук; титри не стають додатковою озвучкою."
      },
      {
        "step": 10,
        "action": "Переглянути всю картинку й звук до CTA; окремо перевірити HTTPS ranges, реальний decode/audio/seek та UI. Зберегти clean/captioned versions і reports.",
        "exit": "AV acceptance окремо від transport acceptance; реальної метрики утримання чи продажів це не дає."
      }
    ],
    "legacyBinding": {
      "observed": "harness/native_av.py:139 вимагає source.source_scene == shot.scene, а :180 шукає story.scenes за shot.scene. Отже поле змішує original provenance з новою story scene. :164 повторює зв’язку для stills. Це не сумісно з вільною function-level відповідністю без окремого режиму.",
      "proposedSchema": {
        "story_scene_id": "NS02",
        "authored_unit_id": "GU07",
        "source_reference": {
          "source_id": "resilia",
          "source_scene_ids": [
            "S09"
          ],
          "source_shot_ids": [
            "SH063",
            "SH064"
          ],
          "source_range_s": [
            164.5,
            171.4
          ],
          "original_sha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "mapping_id": "MAP04"
        },
        "speech_line_ids": [
          "NL019",
          "NL020",
          "NL021"
        ]
      },
      "requiredChange": "Додати opt-in function-reference/v1 у v2 plan. Валідатор authored speech перевіряє NS02 і OL/LA; provenance validator незалежно перевіряє source IDs/range/hash і MAP04. Ніде не переписувати frozen S09 на NS02. Legacy path за відсутності profile лишається byte-compatible.",
      "requiredTests": [
        "Дозволений reordered/many-to-many original reference до NS02.",
        "Відмова на неіснуючий SH, змінений hash або range поза оригіналом.",
        "Відмова на NL з іншої authored scene, втрату/дубль authored word occurrence, підміну voice owner.",
        "Відмова на згенерований descendant як actual original.",
        "Старі native/still regression checks збережені.",
        "python3 -m unittest discover -s tests; relevant native compiler/production policy checks."
      ],
      "implementedNow": false,
      "reason": "Цей deliverable — proposal і production plan. Зміна spendable compiler обов’язкова ДО майбутньої production, не оголошена вже виконаною."
    },
    "units": [
      {
        "id": "GU01",
        "eventIds": [
          "EV001",
          "EV002",
          "EV003",
          "EV004"
        ],
        "sceneIds": [
          "NS01"
        ],
        "start": 0.0,
        "end": 7.5,
        "plannedDuration": 7.5,
        "editorialShotIds": [
          "NSH001",
          "NSH002",
          "NSH003"
        ],
        "lineIds": [
          "NL001",
          "NL002",
          "NL003",
          "NL004"
        ],
        "voices": [
          "IR",
          "OL"
        ],
        "purpose": "Короткий факт, відповідь, уточнення; двоє голосів у спільному просторі.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            0.0,
            7.5
          ],
          "sourceShotIds": [
            "SH001",
            "SH002",
            "SH003"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH001/video.mp4",
            "sha256": "af6ccd1d4ca9067df0a5b5cb4f05da63c8bcbe4fff4b2e251e7c9120c0b64bf5",
            "bytes": 148960,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "0.000000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.733333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH001/video.mp4"
            ]
          },
          "packetId": "SH001",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV001",
            "lineId": "NL001",
            "speaker": "IR",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Тепер твого обличчя зовсім немає.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV002",
            "lineId": "NL002",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              1
            ],
            "text": "Зовсім?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV003",
            "lineId": "NL003",
            "speaker": "IR",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "Голос лишився. І руки.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV004",
            "lineId": "NL004",
            "speaker": "IR",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Мамо, ти ж сама попросила.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU02",
        "eventIds": [
          "EV005",
          "EV006",
          "EV007",
          "EV008",
          "EV009",
          "EV010"
        ],
        "sceneIds": [
          "NS01"
        ],
        "start": 7.5,
        "end": 17.0,
        "plannedDuration": 9.5,
        "editorialShotIds": [
          "NSH004",
          "NSH005",
          "NSH006"
        ],
        "lineIds": [
          "NL005",
          "NL006",
          "NL007",
          "NL008"
        ],
        "voices": [
          "OL",
          "IR"
        ],
        "purpose": "Заспокоєння над слухачкою, яка лишає своє запитання відкритим.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            21.0,
            28.5
          ],
          "sourceShotIds": [
            "SH011",
            "SH012",
            "SH013",
            "SH014",
            "SH015"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH012/video.mp4",
            "sha256": "4c716ad98447f47adea0615af6f99b462a9b3ed70dd837a124005e3ba576f61d",
            "bytes": 76320,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "22.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.200000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH012/video.mp4"
            ]
          },
          "packetId": "SH012",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV005",
            "lineId": "NL005",
            "speaker": "OL",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Я просила не так близько.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV007",
            "lineId": "NL006",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              6
            ],
            "text": "Я весь час дивлюся на шию.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV008",
            "lineId": "NL007",
            "speaker": "IR",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "Ніхто не буде роздивлятися.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV009",
            "lineId": "NL008",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Я буду.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU03",
        "eventIds": [
          "EV011",
          "EV012",
          "EV013"
        ],
        "sceneIds": [
          "NS01"
        ],
        "start": 17.0,
        "end": 24.0,
        "plannedDuration": 7.0,
        "editorialShotIds": [
          "NSH007",
          "NSH008",
          "NSH009"
        ],
        "lineIds": [
          "NL009",
          "NL010"
        ],
        "voices": [
          "OL"
        ],
        "purpose": "Від короткого професійного факту до рішення; предметна вставка під тією самою реплікою.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            223.666667,
            231.6
          ],
          "sourceShotIds": [
            "SH078",
            "SH079",
            "SH080",
            "SH081"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH080/video.mp4",
            "sha256": "e082d432e0a1e8975e04eca509f9639dd78a8edea0fa608e2bf03e2df8e5101d",
            "bytes": 172915,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "226.800000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.333333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH080/video.mp4"
            ]
          },
          "packetId": "SH080",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV011",
            "lineId": "NL009",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Тридцять років шию для інших.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV012",
            "lineId": "NL009",
            "speaker": "OL",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              5,
              15
            ],
            "text": "А це мій курс. Я не хочу лишатися за кадром.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV013",
            "lineId": "NL010",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              3
            ],
            "text": "Перезнімемо. Зі мною.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU04",
        "eventIds": [
          "EV014",
          "EV015",
          "EV016"
        ],
        "sceneIds": [
          "NS01"
        ],
        "start": 24.0,
        "end": 30.5,
        "plannedDuration": 6.5,
        "editorialShotIds": [
          "NSH010",
          "NSH011"
        ],
        "lineIds": [
          "NL011",
          "NL012"
        ],
        "voices": [
          "IR",
          "OL"
        ],
        "purpose": "Рішення матері набуває ціни в завершеному рухові розпорювача.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            43.9,
            51.1
          ],
          "sourceShotIds": [
            "SH024",
            "SH025",
            "SH026"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH024/video.mp4",
            "sha256": "16f07ac08a0827da1f951c2dacad62038cd2d2a9cf5660520972943997ed8eca",
            "bytes": 126648,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "43.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.700000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH024/video.mp4"
            ]
          },
          "packetId": "SH024",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV014",
            "lineId": "NL011",
            "speaker": "IR",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              6
            ],
            "text": "Наступне вікно — за шість тижнів.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV015",
            "lineId": "NL011",
            "speaker": "IR",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              6,
              9
            ],
            "text": "І знов оренда.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV016",
            "lineId": "NL012",
            "speaker": "OL",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              7
            ],
            "text": "Бронюй. Цей шов я зроблю ще раз.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU05",
        "eventIds": [
          "EV017",
          "EV018",
          "EV019",
          "EV020"
        ],
        "sceneIds": [
          "NS02"
        ],
        "start": 30.5,
        "end": 39.5,
        "plannedDuration": 9.0,
        "editorialShotIds": [
          "NSH012",
          "NSH013",
          "NSH014"
        ],
        "lineIds": [
          "NL013",
          "NL014",
          "NL015"
        ],
        "voices": [
          "LA",
          "OL"
        ],
        "purpose": "Новий співрозмовник питає перед порадою; зізнання без сліз.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            55.0,
            62.5
          ],
          "sourceShotIds": [
            "SH029",
            "SH030"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH030/video.mp4",
            "sha256": "c439c97c792f5bd6d5d5b12fc482ed9a52f66f3e03759d38763f3834f3a99d85",
            "bytes": 201732,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "61.100000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "3.666667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH030/video.mp4"
            ]
          },
          "packetId": "SH030",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV017",
            "lineId": "NL013",
            "speaker": "LA",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Навіщо розпорюєш? Уже ж готово.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV018",
            "lineId": "NL014",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              6
            ],
            "text": "Для зйомки. Я себе там сховала.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV019",
            "lineId": "NL015",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "Ще й шкіру стягує.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV020",
            "lineId": "NL015",
            "speaker": "OL",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              4,
              8
            ],
            "text": "Під шарфом тільки гірше.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU06",
        "eventIds": [
          "EV021",
          "EV022",
          "EV023"
        ],
        "sceneIds": [
          "NS02"
        ],
        "start": 39.5,
        "end": 46.5,
        "plannedDuration": 7.0,
        "editorialShotIds": [
          "NSH015",
          "NSH016",
          "NSH017"
        ],
        "lineIds": [
          "NL016",
          "NL017",
          "NL018"
        ],
        "voices": [
          "LA",
          "OL"
        ],
        "purpose": "Питання → відповідь → діставання предмета. Банка не виникає сама.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            114.166667,
            122.0
          ],
          "sourceShotIds": [
            "SH044",
            "SH045",
            "SH046",
            "SH047",
            "SH048"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH046/video.mp4",
            "sha256": "407fafe11d982f3b35f2a8003c509c426ff1ae22876c2a8a681f761c54711ea6",
            "bytes": 123906,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "117.800000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.800000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH046/video.mp4"
            ]
          },
          "packetId": "SH046",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV021",
            "lineId": "NL016",
            "speaker": "LA",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              3
            ],
            "text": "А чим доглядаєш?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV022",
            "lineId": "NL017",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              9
            ],
            "text": "Обличчя мажу щодня. А до шиї руки не доходять.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV023",
            "lineId": "NL018",
            "speaker": "LA",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Я для шиї взяла goPure.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU07",
        "eventIds": [
          "EV024",
          "EV025",
          "EV026",
          "EV027"
        ],
        "sceneIds": [
          "NS02"
        ],
        "start": 46.5,
        "end": 55.5,
        "plannedDuration": 9.0,
        "editorialShotIds": [
          "NSH018",
          "NSH019",
          "NSH020"
        ],
        "lineIds": [
          "NL019",
          "NL020",
          "NL021"
        ],
        "voices": [
          "OL",
          "LA"
        ],
        "purpose": "Скептичне коротке питання, обмежена відповідь, голос триває над банкою.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            164.5,
            171.4
          ],
          "sourceShotIds": [
            "SH063",
            "SH064"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH063/video.mp4",
            "sha256": "ddfd8ef0bc345a16fc79b3f1a183bd7b8bdb2692b505938002cc1f5e40c0cbb3",
            "bytes": 286756,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "163.966667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "5.400000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH063/video.mp4"
            ]
          },
          "packetId": "SH063",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV024",
            "lineId": "NL019",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "І що, складки зникнуть?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV025",
            "lineId": "NL020",
            "speaker": "LA",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              7
            ],
            "text": "Зовсім — не обіцяю. Це крем, Олено.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV026",
            "lineId": "NL021",
            "speaker": "LA",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Для зволоження.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV027",
            "lineId": "NL021",
            "speaker": "LA",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              2,
              9
            ],
            "text": "Виробник пише: і для гладкішого вигляду шкіри.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU08",
        "eventIds": [
          "EV028",
          "EV029",
          "EV030",
          "EV031"
        ],
        "sceneIds": [
          "NS02"
        ],
        "start": 55.5,
        "end": 63.5,
        "plannedDuration": 8.0,
        "editorialShotIds": [
          "NSH021",
          "NSH022",
          "NSH023",
          "NSH024"
        ],
        "lineIds": [
          "NL022",
          "NL023",
          "NL024"
        ],
        "voices": [
          "OL",
          "LA"
        ],
        "purpose": "Згода зі збереженим сумнівом; повернення до власної дії.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            231.6,
            239.5
          ],
          "sourceShotIds": [
            "SH082",
            "SH083",
            "SH084",
            "SH085"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH083/video.mp4",
            "sha256": "94affdbd0cc805c2398526dbbc015ae681ff09e3e5b7c0df97f98521b8a04ab3",
            "bytes": 103839,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "233.433333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.700000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH083/video.mp4"
            ]
          },
          "packetId": "SH083",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV028",
            "lineId": "NL022",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              3
            ],
            "text": "До зйомки встигну?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV029",
            "lineId": "NL023",
            "speaker": "LA",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Не знаю.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV030",
            "lineId": "NL023",
            "speaker": "LA",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              2,
              8
            ],
            "text": "Я наношу потроху вранці й увечері.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV031",
            "lineId": "NL024",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              6
            ],
            "text": "Спробую. Але зйомку вже не скасовую.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU09",
        "eventIds": [
          "EV032",
          "EV033"
        ],
        "sceneIds": [
          "NS03"
        ],
        "start": 63.5,
        "end": 68.0,
        "plannedDuration": 4.5,
        "editorialShotIds": [
          "NSH025",
          "NSH026"
        ],
        "lineIds": [],
        "voices": [],
        "purpose": "Два мовчазні UI inserts: перевірка й власна заявка; екран після generation.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            28.533333,
            35.5
          ],
          "sourceShotIds": [
            "SH016",
            "SH017",
            "SH018",
            "SH019"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH018/video.mp4",
            "sha256": "18966b8ed8d76751b4c465bd4bb677ce2f880c7c43e87f2d1e98f13342327bc8",
            "bytes": 130356,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "31.466667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.966666",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH018/video.mp4"
            ]
          },
          "packetId": "SH018",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": []
      },
      {
        "id": "GU10",
        "eventIds": [
          "EV034",
          "EV035",
          "EV036"
        ],
        "sceneIds": [
          "NS03"
        ],
        "start": 68.0,
        "end": 74.0,
        "plannedDuration": 6.0,
        "editorialShotIds": [
          "NSH027"
        ],
        "lineIds": [
          "NL025",
          "NL026"
        ],
        "voices": [
          "IR",
          "OL"
        ],
        "purpose": "Телефонна репліка Ірини і відповідь Олени; збереження тембру й просторів.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            285.9,
            293.0
          ],
          "sourceShotIds": [
            "SH104"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH104/video.mp4",
            "sha256": "9450aec9266dc845272c2c30288080d9eae5da4f03e7c32bf9816927528d181c",
            "bytes": 565918,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "285.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "8.966667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH104/video.mp4"
            ]
          },
          "packetId": "SH104",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV034",
            "lineId": "NL025",
            "speaker": "IR",
            "mode": "phone",
            "proposalWhitespaceRange": [
              0,
              3
            ],
            "text": "Мамо, неділю підтвердили.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV035",
            "lineId": "NL025",
            "speaker": "IR",
            "mode": "phone",
            "proposalWhitespaceRange": [
              3,
              6
            ],
            "text": "Лишати старий дубль?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV036",
            "lineId": "NL026",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "Лишай. Там хороший шов.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU11",
        "eventIds": [
          "EV037",
          "EV038",
          "EV039",
          "EV040"
        ],
        "sceneIds": [
          "NS04"
        ],
        "start": 74.0,
        "end": 83.5,
        "plannedDuration": 9.5,
        "editorialShotIds": [
          "NSH028",
          "NSH029",
          "NSH030",
          "NSH031"
        ],
        "lineIds": [
          "NL027"
        ],
        "voices": [
          "OL"
        ],
        "purpose": "Отримання/відкриття/контакт/завершення. Монтаж часу з видимими станами. Крем не змінює шкіру за один жест.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            244.9,
            252.0
          ],
          "sourceShotIds": [
            "SH088",
            "SH089",
            "SH090"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH088/video.mp4",
            "sha256": "c3ca9cdfb124a9c8edcdaa61f9879190783e873b134e2d939279e4104cbb8a05",
            "bytes": 172736,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "244.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.466667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH088/video.mp4"
            ]
          },
          "packetId": "SH088",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV038",
            "lineId": "NL027",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "Зранку й увечері —",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV039",
            "lineId": "NL027",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              4,
              9
            ],
            "text": "трохи крему на чисту шкіру.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU12",
        "eventIds": [
          "EV041",
          "EV042",
          "EV043",
          "EV044"
        ],
        "sceneIds": [
          "NS04"
        ],
        "start": 83.5,
        "end": 91.5,
        "plannedDuration": 8.0,
        "editorialShotIds": [
          "NSH032",
          "NSH033",
          "NSH034",
          "NSH035"
        ],
        "lineIds": [
          "NL028",
          "NL029"
        ],
        "voices": [
          "OL"
        ],
        "purpose": "Побутова послідовність під одним VO Олени, рот не рухається. Кожен день позначений у пості.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            252.0,
            260.0
          ],
          "sourceShotIds": [
            "SH090",
            "SH091",
            "SH092",
            "SH093"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH091/video.mp4",
            "sha256": "903b1f81abf06aacb421d202a8cd07de7e0af8bfb137006e4af1e2a5a1495448",
            "bytes": 342315,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "253.400000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.233333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH091/video.mp4"
            ]
          },
          "packetId": "SH091",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV041",
            "lineId": "NL028",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              0,
              8
            ],
            "text": "А зранку — ще й захист від сонця.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV042",
            "lineId": "NL029",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              0,
              3
            ],
            "text": "І урок готувала.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV043",
            "lineId": "NL029",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              3,
              4
            ],
            "text": "Переписувала.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV044",
            "lineId": "NL029",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              4,
              6
            ],
            "text": "Знову пробувала.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU13",
        "eventIds": [
          "EV045",
          "EV046"
        ],
        "sceneIds": [
          "NS04"
        ],
        "start": 91.5,
        "end": 96.0,
        "plannedDuration": 4.5,
        "editorialShotIds": [
          "NSH036",
          "NSH037"
        ],
        "lineIds": [],
        "voices": [],
        "purpose": "Тихі завершені побутові дії перед поверненням до центрального випробування.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            255.633333,
            263.0
          ],
          "sourceShotIds": [
            "SH092",
            "SH093",
            "SH094"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH092/video.mp4",
            "sha256": "da886b78018f2862c723095af22f48a2a25817a3c68710aa7439ecbfd2aede79",
            "bytes": 293907,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "255.633333",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.966667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH092/video.mp4"
            ]
          },
          "packetId": "SH092",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": []
      },
      {
        "id": "GU14",
        "eventIds": [
          "EV047",
          "EV048",
          "EV049",
          "EV050"
        ],
        "sceneIds": [
          "NS05"
        ],
        "start": 96.0,
        "end": 103.0,
        "plannedDuration": 7.0,
        "editorialShotIds": [
          "NSH038",
          "NSH039",
          "NSH040"
        ],
        "lineIds": [
          "NL030",
          "NL031",
          "NL032"
        ],
        "voices": [
          "OL"
        ],
        "purpose": "Повернення в той самий простір; власниця проблеми бачить недосконалість, не чудо.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            266.1,
            274.15
          ],
          "sourceShotIds": [
            "SH096",
            "SH097",
            "SH098"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH096/video.mp4",
            "sha256": "6e54d16663a47a61b15fa47a80fd8e3bd0c31b0281836c6724b9ba1118d27e2e",
            "bytes": 165648,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "266.100000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "3.066667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH096/video.mp4"
            ]
          },
          "packetId": "SH096",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV047",
            "lineId": "NL030",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "Поверни монітор до мене.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV049",
            "lineId": "NL031",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Складки лишилися.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV050",
            "lineId": "NL032",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Але вже не так стягує.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU15",
        "eventIds": [
          "EV051",
          "EV052",
          "EV053",
          "EV054",
          "EV055",
          "EV056"
        ],
        "sceneIds": [
          "NS05"
        ],
        "start": 103.0,
        "end": 113.5,
        "plannedDuration": 10.5,
        "editorialShotIds": [
          "NSH041",
          "NSH042",
          "NSH043"
        ],
        "lineIds": [
          "NL032",
          "NL033",
          "NL034",
          "NL035",
          "NL036"
        ],
        "voices": [
          "OL",
          "IR"
        ],
        "purpose": "Голос матері над слухачкою; рішення в дії й зароблений вдих перед стартом.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            231.6,
            239.5
          ],
          "sourceShotIds": [
            "SH082",
            "SH083",
            "SH084",
            "SH085"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH085/video.mp4",
            "sha256": "c42deca177f3b4d827028af865d3631c85f549b89a1036b1c3cb0007f994e611",
            "bytes": 75802,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "238.166667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "1.333333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH085/video.mp4"
            ]
          },
          "packetId": "SH085",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV051",
            "lineId": "NL032",
            "speaker": "OL",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              5,
              7
            ],
            "text": "Мені комфортніше.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV052",
            "lineId": "NL033",
            "speaker": "IR",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "Можемо трохи відсунути камеру.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV053",
            "lineId": "NL034",
            "speaker": "OL",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Ні. Руки тоді гірше видно.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV054",
            "lineId": "NL035",
            "speaker": "IR",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Тоді починаємо?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV056",
            "lineId": "NL036",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              1
            ],
            "text": "Так.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU16",
        "eventIds": [
          "EV057",
          "EV058",
          "EV059",
          "EV060"
        ],
        "sceneIds": [
          "NS06"
        ],
        "start": 113.5,
        "end": 120.5,
        "plannedDuration": 7.0,
        "editorialShotIds": [
          "NSH044",
          "NSH045",
          "NSH046"
        ],
        "lineIds": [
          "NL037",
          "NL038",
          "NL039"
        ],
        "voices": [
          "OL",
          "IR"
        ],
        "purpose": "Назва/показ дії/просте переривання/питання; короткі й довгі turn groups в одному performance arc.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            119.79,
            127.0
          ],
          "sourceShotIds": [
            "SH047",
            "SH048",
            "SH049",
            "SH050"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH048/video.mp4",
            "sha256": "e14201652489f47a78ff76d811ec62465e850b4b64a96f4ff0f0ffe5a39f2289",
            "bytes": 131119,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "120.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.233333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH048/video.mp4"
            ]
          },
          "packetId": "SH048",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV057",
            "lineId": "NL037",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              4
            ],
            "text": "Мене звати Олена Коваль.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV058",
            "lineId": "NL037",
            "speaker": "OL",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              4,
              8
            ],
            "text": "Сьогодні покажу потайний шов.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV059",
            "lineId": "NL038",
            "speaker": "IR",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Мамо, зачекай.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV060",
            "lineId": "NL039",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              1
            ],
            "text": "Що?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU17",
        "eventIds": [
          "EV061",
          "EV062",
          "EV063",
          "EV064"
        ],
        "sceneIds": [
          "NS06"
        ],
        "start": 120.5,
        "end": 128.5,
        "plannedDuration": 8.0,
        "editorialShotIds": [
          "NSH047",
          "NSH048",
          "NSH049"
        ],
        "lineIds": [
          "NL040",
          "NL041"
        ],
        "voices": [
          "IR",
          "OL"
        ],
        "purpose": "Несподіване переосмислення зупинки; коротка тиха реакція і запрошення.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            285.9,
            294.866667
          ],
          "sourceShotIds": [
            "SH104"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH104/video.mp4",
            "sha256": "9450aec9266dc845272c2c30288080d9eae5da4f03e7c32bf9816927528d181c",
            "bytes": 565918,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "285.900000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "8.966667",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH104/video.mp4"
            ]
          },
          "packetId": "SH104",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV061",
            "lineId": "NL040",
            "speaker": "IR",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Повільніше покажи.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV062",
            "lineId": "NL040",
            "speaker": "IR",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              2,
              6
            ],
            "text": "Я теж хочу навчитися.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV064",
            "lineId": "NL041",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "Сідай. Тільки камеру не вимикай.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU18",
        "eventIds": [
          "EV065",
          "EV066",
          "EV067",
          "EV068",
          "EV069"
        ],
        "sceneIds": [
          "NS06"
        ],
        "start": 128.5,
        "end": 136.5,
        "plannedDuration": 8.0,
        "editorialShotIds": [
          "NSH050",
          "NSH051"
        ],
        "lineIds": [
          "NL042",
          "NL043",
          "NL044",
          "NL045"
        ],
        "voices": [
          "IR",
          "OL"
        ],
        "purpose": "Один спільний побутовий рух, корисна коротка відповідь, мала винагорода без монологу.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            258.0,
            266.1
          ],
          "sourceShotIds": [
            "SH093",
            "SH094",
            "SH095"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH094/video.mp4",
            "sha256": "182cfb4c5dfc2b5356d64e98ccf05252fe6000c11cd5a502e88ffa400ba8a87c",
            "bytes": 213806,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "260.100000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "2.900000",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH094/video.mp4"
            ]
          },
          "packetId": "SH094",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV065",
            "lineId": "NL042",
            "speaker": "IR",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Так тримати?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV066",
            "lineId": "NL043",
            "speaker": "OL",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              3
            ],
            "text": "Нитку вільніше. Отак.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV067",
            "lineId": "NL044",
            "speaker": "IR",
            "mode": "offscreen",
            "proposalWhitespaceRange": [
              0,
              1
            ],
            "text": "Тепер?",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV068",
            "lineId": "NL045",
            "speaker": "OL",
            "mode": "onscreen",
            "proposalWhitespaceRange": [
              0,
              2
            ],
            "text": "Так. Добре.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU19",
        "eventIds": [
          "EV070",
          "EV071"
        ],
        "sceneIds": [
          "NS07"
        ],
        "start": 136.5,
        "end": 141.5,
        "plannedDuration": 5.0,
        "editorialShotIds": [
          "NSH052"
        ],
        "lineIds": [
          "NL046"
        ],
        "voices": [
          "OL"
        ],
        "purpose": "Власний продукт і окремий комерційний VO тим самим голосом; ротів немає.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            294.866667,
            300.8
          ],
          "sourceShotIds": [
            "SH105",
            "SH106"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH105/video.mp4",
            "sha256": "b0e79e167ac65239bceed93d9d802dee8a933130134e66a89cc05a5c20b7b4f5",
            "bytes": 556474,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "294.866667",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "5.233333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH105/video.mp4"
            ]
          },
          "packetId": "SH105",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV070",
            "lineId": "NL046",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              0,
              5
            ],
            "text": "goPure Tighten & Lift —",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV071",
            "lineId": "NL046",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              5,
              10
            ],
            "text": "крем для шиї та декольте.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      },
      {
        "id": "GU20",
        "eventIds": [
          "EV072",
          "EV073",
          "EV074"
        ],
        "sceneIds": [
          "NS07"
        ],
        "start": 141.5,
        "end": 149.5,
        "plannedDuration": 8.0,
        "editorialShotIds": [
          "NSH053"
        ],
        "lineIds": [
          "NL047",
          "NL048"
        ],
        "voices": [
          "OL"
        ],
        "purpose": "Native VO про інформацію/заявку/атрибутовану оплату. Графічний фінал накладається у HyperFrames.",
        "reference": {
          "originalSha256": "708cb005be27b73d43fa248bd8f003489098a48a43fcc59d6ce31bde841f7ff6",
          "range": [
            307.7,
            315.7
          ],
          "sourceShotIds": [
            "SH107",
            "SH108"
          ],
          "playablePacket": {
            "path": "analysis/resilia-dna/packets/SH108/video.mp4",
            "sha256": "b37d75c5c54a1638bab30e8c446fe56272cd2bac00a0ba1ab8f77a92e6ed170c",
            "bytes": 852035,
            "recipe": [
              "ffmpeg",
              "-v",
              "error",
              "-y",
              "-threads",
              "1",
              "-ss",
              "310.700000",
              "-i",
              "/workspaces/UGS/AdFactoryNarrativeFormat/data/references_liked/resilia-aged-garlic-family-cholesterol-story.mp4",
              "-t",
              "5.233333",
              "-vf",
              "scale=-2:720",
              "-c:v",
              "libx264",
              "-threads",
              "1",
              "-preset",
              "fast",
              "-crf",
              "25",
              "-c:a",
              "aac",
              "-b:a",
              "96k",
              "-movflags",
              "+faststart",
              "/workspaces/UGS/AdFactoryNarrativeFormat/trees/b24e66ce80/analysis/resilia-dna/packets/SH108/video.mp4"
            ]
          },
          "packetId": "SH108",
          "instruction": "Вирізати саме цей безперервний діапазон з hash-verified original master при підготовці. Наявний source packet — playable evidence механізму, не вже підготовлений production upload. Зберегти SHA-256 derivative, діапазон, source shot IDs та receipt upload."
        },
        "generationStrategy": "Один native performance arc із неперервним звуком та внутрішніми мотивованими ракурсами. Якщо provider не тримає монтаж/довжину — окремі версійовані coverage units із тим самим authored word ledger; не стискати speech і не починати її заново на вставках.",
        "handles": "Планувати 0.25–0.5 s запасу до/після змісту лише якщо поточний API це підтримує; не відрізати останній вдих/жест. Actual duration перевіряється окремо.",
        "status": "PLANNED — no native job submitted",
        "speechSegments": [
          {
            "eventId": "EV072",
            "lineId": "NL047",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              0,
              6
            ],
            "text": "Склад і умови — за посиланням.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV073",
            "lineId": "NL047",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              6,
              10
            ],
            "text": "Залиште номер для замовлення.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          },
          {
            "eventId": "EV074",
            "lineId": "NL048",
            "speaker": "OL",
            "mode": "voiceover",
            "proposalWhitespaceRange": [
              0,
              7
            ],
            "text": "За умовами продавця, оплата — при отриманні.",
            "status": "Proposed token slice; convert to compiler occurrence IDs from the future contextual stress ledger."
          }
        ]
      }
    ],
    "postOnly": [
      {
        "eventIds": [
          "EV075"
        ],
        "action": "2.5s hold фінальної картки; жодного нового provider job."
      }
    ],
    "audioAssembly": [
      "Не перезапускати одну фразу на кожному NSH: NL009, NL011, NL015, NL021, NL023, NL025, NL027, NL029, NL032, NL037, NL040, NL046/47 мають розписані продовження.",
      "GU12 NL029 — один запис VO через кілька днів/кадрів; не просити мовчазну Олену артикулювати оповідь.",
      "GU10 voice IR_phone належить IR, pictured OL мовчить до своєї відповіді; телефонний фільтр не замінює ідентичність.",
      "GU15 починається продовженням NL032 після GU14: скласти з одного прийнятого повного utterance, зберегти безшовний native tail. Якщо native takes не дають сумісного продовження — перегенерувати цілий реченнєвий performance arc, не склеювати два різних голоси.",
      "J-cut IR_phone заходить 0.25s до ED020; точну межу після actual waveform. Same-scene L-cuts не змінюють room tone. Усі режисерські дельти тут запропоновані.",
      "Лише природні room tone/дієві звуки з native takes і чисті підтверджені handles; нового music stage немає. Немає вигаданих слів тла."
    ]
  },
  "metrics": {
    "scenes": 7,
    "editorialShots": 53,
    "cameraSetups": 45,
    "events": 75,
    "lines": 48,
    "providerUnitsPlanned": 20,
    "lexicalWords": 246
  }
}
